函数

# 函数: 对代码块的封装和定义
# 1.函数的定义
# 2.函数名称和函数体
# 3.函数的调用
# 4.参数和返回值

# 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...
# 数列从第3项开始,每一项都等于前两项之和。
def fib(n):
"""Print a Fibonacci series up to n."""
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
fib(2000) # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

def fib2(n: int) -> list:
"""Return a list containing the Fibonacci series up to n."""
result = []
a, b = 0, 1
while a < n:
result.append(a) # see below
a, b = b, a + b
return result
# 1.return 语句可以从函数中携带着返回值返回。return 语句不携带任何表达式参数时返回 None。如果一直执行到整个函数结束还没有碰到 return 语句,也返回 None。
# 2.语句 result.append(a) 调用了列表result的一个方法。方法是“属于”一个对象且名字叫做obj.methodname的函数,其中obj是某个对象(可能是个表达式),methodname是由该对象类型定义的方法的名称。不同类型定义了不同的方法。不同的类型的方法可以具有相同的名称而不引起歧义。(可以使用classes定义你自己的对象类型和方法,参见Classes)示例中显示的append() 方法是给列表对象定义的;它添加一个新的元素到列表的末尾。在这个示例中,它等同于result = result + [a],但是它更高效。
# 3.如果return可以返回多个结果, 则调⽤者可以接收⼀个tuple, 调⽤者可以直接解构成多个变量

# 默认值在函数定义的时刻,在定义的作用域中计算,因此:
i = 5
def f(arg=i):
print(arg)
print(dir(f))
i = 6
f() # 5


# 获取函数默认值参数的方法
# 1.使用函数的__defaults__魔术方法
def f(a, L=[]):
L.append(a)
return L
for i in range(3):
print("函数默认值:", f.__defaults__) # 返回一个列表
print(f(i))
# 2.使用inspect.getargspec获取
import inspect
def f(a: str, b: list, c: str = 1, d: list = []) -> str:
pass
print(inspect.signature(f))
print(inspect.getfullargspec(f))
原文地址:https://www.cnblogs.com/xiaogaokui/p/10735208.html