python函数
函数的参数
函数定义方法
def 函数名(参数列表):
函数体
- 函数的参数有必选参数和默认参数,默认参数可以不传,但是默认参数后面不能有必选参数
- 可变参数 fun(fmt,*args) 没有关键字参数时,可变参数要放在最后面
- 关键字参数print(fmt, *args, **kw) 关键字参数要放在最后面
可变参数示例
def fun(fmt, *values):
print(fmt)
# 打印 values type is <class 'tuple'>
# 说明可变参数传递的是元组
print("values type is",type(values))
print(values) # 打印 (1, 2)
for v in values:
print("v = ", v)
fun("%d", 1, 2)
关键字参数示例
# 关键字参数
def fun4(a, **kw):
print("a = ", a) # a = 100
print("kw type is ", type(kw)) # kw type is <class 'dict'>
if "name" in kw:
print(kw["name"]) # xiaoming
fun4(100, name = "xiaoming")
python函数返回值
返回的方式
return
或者没有return语句return None
None表示没有,与C语言不同,python中对None
的访问会出错return re
返回1个值return r1,r2,r3
返回多个值
python函数return之后内部参数的引用计数会加1, 注意,python中没有局部变量的概念,都是引用,变量出了作用域引用计数会减1
return语句将参数引用计数加1,出了函数后参数引用计数减1,所以python中函数里的局部变量在函数外也可以访问下面的代码说明return默认返回None
def fun1():
print("fun1")
re = fun1()
print(re) # 打印 None
下面的代码示例返回多个值
def fun4():
return 5, "test", [1, 2]
i, s, l = fun4()
print("i is ", i) # 5
print("s is ", s) # test
print("l is ", l) # [1,2]
闭包(Closure)
闭包本质就是内嵌函数
先看一个简单的闭包示例
def outfun(a):
def infun(b):
return a + b
return infun
f = outfun(1)
print("f() = ", f(3)) # 打印4
闭包返回了一个函数,
lambda函数
lambda语法
lambda [parameters]:expression
例如lambda x,y:x*y
;函数输入是x和y,输出是他们的积
lambda使用示例
fun = lambda x, y : x*y
print("lambda fun = ",fun(3,5)) # lambda fun = 15
def testfun():
return lambda x,y:x+y
f = testfun()
print(f(1,2)) # 3
函数中变量的作用域
python中变量的作用域有两种
- Local(函数内部)局部作用域
- Enclosing(嵌套函数的外层函数内部) 嵌套作用域(闭包)
- Global(模块全局)全局作用域
- Built-in(内建)内建作用域 上述作用域的优先级从上往下依次减小L->E->G->B,(即变量查找次序从上往下)
那么,如果我们在Local作用域但是想要访问E作用域的变量,要怎么做?可以使用global
和nonlocal
关键字。
global:函数内访问全局变量
# 全局作用域
gx = 1001
def fun():
global gx # 用global来使用全局的gx变量
gx += 1000
print(gx)
fun() # 2001
nonlocal:闭包函数访问外部函数变量
def fun():
c = 1002
def infun():
# 内嵌作用域
nonlocal c
print(c)
return infun
f = fun()
f() # 输出1002