关键字参数
- 关键字参数就是在实参前面加上形参 = ,让该实参传给固定的实参
def f (name, words):
print (name+"->"+words)
f(words = "haha", name = "fengs")
默认参数
- 默认参数就是给实参一个默认值, 如果调用函数时不传参, 那么就运行默认参数, 如果传参, 那么就和普通的一样
def f (name = "xiaoming", words = "haha"):
print (name+"->"+words)
f()
def f (name = "xiaoming", words = "haha"):
print (name+"->"+words)
f(name = "xiaofeng", words = "heihei")
收集参数
- 收集参数, 就是当你不知道要传多少个参数的时候, 可以设置为收集参数, 就是在形参前面加*,
def f (*params):
print ("你传的形参个数是:", len(params))
f(1, 2, 3, 4, 5, 6,)
- 这时候如果你形参后面还有参数, 就要使用关键字参数了, 一般后面的参数是默认参数。比如:print()函数
函数变量作用域
- 全局变量和局部变量的作用域这里就不多解释了, 传送门:python变量和作用域
- 在函数在可以调用全局变量, 但是不能直接修改, 如果你直接修改就实际上修改的不是全局变量,
- 具体是这样的: 当python检测到你要直接在函数中修改全局变量时, 它会自动新建一个局部变量, 名字与全局变量一致, 然后修改该局部变量。
- 如果你非要在函数中修改全局变量, 可以global
内嵌函数
- 简单的说就是就是在函数内部又定义了一个函数
def Fun1 ():
x = 5
def Fun2(y):
nonlocal x
x *= y
return x
return Fun2(3)
print (Fun1())
- 其实和全局变量在函数中的引用差不多, 外部函数定义的变量在内部函数中只能引用, 不能直接修改, 如果非要修改, 请用nonlocal关键字指明该变量是外部函数的, 其实和global是一个道理
闭包
- 闭包的内容可以参见 传送门:什么是闭包
- 理解下面两个程序
def make_adder(addend):
def adder(augend):
return augend + addend
return adder
print (make_adder(23)(100))
print (make_adder(44)(100))
和
def make_adder(addend):
def adder(augend):
return augend + addend
return adder(100)
print (make_adder(23))
print (make_adder(44))
匿名函数(lambda表达式)
比如:求两个数的和的函数
def add(x, y):
return x+y
print (add(3, 4))
可以简写为
g = lambda x, y: x + y
print (g(3, 4))
- 简单说一下 lambda 的构成:
- 1, 冒号前面的是函数的参数, 可以为一个或者多个或者没有
- 2, 冒号后面的为函数返回值
- 3, lambda 别忘了
- 使用匿名函数的好处:
- 第一个就是不用想函数名, 因为匿名。。。
- 第二是程序看起来更加简洁
- 得到匿名函数的返回值之后你就可以像普通函数一样调用了,
- 但是匿名函数有个限制,就是只能有一个表达式,不需要写return,函数返回值就是该表达式的结果。
- 更多匿名函数的问题请参见 传送门:python匿名函数详解