函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
----------------------------------------------------------------------------------------------------------------------------------------------------
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
----------------------------------------------------------------------------------------------------------------------------------------------------
语法
def 函数名(参数):
函数体
----------------------------------------------------------------------------------------------------------------------------------------------------
调用
函数名(参数) #也可通过另一个函数调用
----------------------------------------------------------------------------------------------------------------------------------------------------
形参(parameter)实参(argument)
def x(a): #创建函数时,a为形参,表示占据的位置
x(b) #调用函数时,b为实参,表示实际的对象
----------------------------------------------------------------------------------------------------------------------------------------------------
默认参数,关键字参数
def x(a=“Nike”, b=“Just do it!”): #Nike,Just do it!为默认参数
print(a +“->”+ b)
x(a="鸿星尔克",b="to be number one ! ") #调用函数时,a=,b=为关键字参数
----------------------------------------------------------------------------------------------------------------------------------------------------
不定长参数(收集参数)
def printinfo( arg1, *vartuple ): #不确定vartuple有多少参数时可在前加*
"打印任何传入的参数"
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return;
----------------------------------------------------------------------------------------------------------------------------------------------------
函数文档
def x():
"这里是函数说明位置"
可通过x.__doc__查看x的文档
----------------------------------------------------------------------------------------------------------------------------------------------------
全局变量(local variable)和局部变量(global variable)
global 和 nonlocal关键字
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中.
z = 10 #z为全局变量
def x(a,b): #a,b为局部变量,只在x中可调用
y = a + b
global z #将z转换为全局变量
z = 15 #如没有添加上方global转换时,z为x函数的局部变量,不影响x函数外z的值。
return
----------------------------------------------------------------------------------------------------------------------------------------------------
内嵌函数
def fun1( ):
print("fun1 is running!")
def fun2( ): #fun2建立于fun1之内,故只能在fun1中被调用,属于内嵌函数。
print("fun2 is running")
fun2( ) #调用fun2需要在fun1内,注意缩进。
----------------------------------------------------------------------------------------------------------------------------------------------------
闭包
闭包就是内嵌函数的一种变形,闭包的书面定义是闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)
,反正我是看不太懂,看一个例子就知道了。
def outer(x):
def inner(y):
print(x * y)
return inner # 注意,inner没有加(),即不是: return inner()
print(outer(5)) # 我们可以看到outer(5)返回的是一个function类型
outer(5)(6)
输出结果:
<function outer.<locals>.inner at 0x000001CBBE3F5048>
30
----------------------------------------------------------------------------------------------------------------------------------------------------
nonlocal 非局部
def fun1( ):lambda 匿名函数
lambda [arg1[,arg2...argn]]:expression
a = lambda x : x * 2 + 1 # :前是原函数的参数,:后面是原函数返回值
recursion 递归
有返回值,且依靠返回自身的原理计算
设置递归层数 import sys
sys.setrecursionlimit(n) #默认值100
斐波那契数列:
>>> def fn(n):
if n<=2:
return 1
else:
return fn(n-1)+fn(n-2)
----------------------------------------------------------------------------------------------------------------------------------------------------