如何为函数添加参数

时间:2018-08-27 21:19:56

标签: python python-3.x

我有两个问题

  1. 我如何记录作为函数的参数
  2. 当我有print('xxxx')这样的几行代码,但是我需要在它们之间执行相同的功能(time.sleep(5))时,最好使用lambda

#method 1
time.sleep(5)
print('i am first')
time.sleep(5)
print('i am 2nd')
time.sleep(5)
print('i am 3rd')
time.sleep(5)
print('i am 4th')
time.sleep(5)
print('i am 5th')


#method 2
import time
def add_delay_between_action(func):
    time.sleep(5)
    func()
    time.sleep(5)
add_delay_between_action(lambda: print('i am first'))
add_delay_between_action(lambda: print('i am 2nd'))
add_delay_between_action(lambda: print('i am 3rd'))
add_delay_between_action(lambda: print('i am 4th'))
add_delay_between_action(lambda: print('i am 5th'))

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我不明白您的第一个问题,但是第二个问题,我将带您进入Python的禅宗(https://www.python.org/dev/peps/pep-0020/)和

  

简单胜于复杂

这完全是观点和上下文的问题,但是如果您有几个功能并且想在它们之间睡眠,那么只需重复sleep调用就简单了,而且易于理解。

答案 2 :(得分:0)

第一个问题:您不能在函数调用的括号内添加文档字符串。这意味着您必须在其他地方解释它(您在那做的只是见解)。

一种选择是在解释该功能的行旁留下注释(因为您使用的是lambda)。

另一种替代方法是定义一个函数并为该函数提供文档字符串。您可能应该避免这种情况,因为您仅使用lambda进行打印,而当lambda起作用时,具有一堆带有打印功能将是多余的。

您的第二个问题有点含糊。

  

我有几行代码,例如print('xxxx'),但我需要在它们之间执行相同的功能(time.sleep(5))。

当需要一个非常特定的函数或需要给另一个函数一个函数参数时,将使用Lambda。无论哪种情况,您的lambda都应该小而简单(即,不要使用可做100件事的lambda。)如果您仅打算将lambda用作传递print()方法的方式,那么,lambdas就可以了。

如果您发现自己有复杂的lambda,则可能需要使用函数了。您可以像使用lambda一样传递它们(如果它们不带参数):

def foo():
    [...]
    [do stuff]
    [...]

add_delay_between_action(foo)

答案 3 :(得分:0)

使用docstrings传达期望的参数类型的另一种方法是使用typing模块。而对于您来说,是针对函数typing.Callable

import time
import typing

def add_delay_between_action(func: typing.Callable[[], None]):
    time.sleep(5)
    func()
    time.sleep(5)