变量作用域(Python中只有模块、类以及函数能够分割作用域)
- 分类:
1.local:局部作用域
2.enclosing:函数作用域(闭包外的函数体中)
定义:调用函数一返回到函数二引用(return 函数二名称,指向函数二),函数二成为闭包。
def func1(a):
b = 20
def func2():
print(a * b)
return func2
enclo = func1(2)()
3.global: 全局作用域
4.built_in:内置作用域
变量查找规则:从上到下依次查找
# 内置函数:globals()可以查看全局变量,locals()可以查看局部变量
if 25 > 2:
m = 'Yes'
print(m) # m是全局变量,条件成立时存在,可以用globals()查看是否存在m
注:以上都是对于模块、类以及函数而言,没有这些代码块时,不必考虑作用域问题。
函数返回值
- 一个函数只有一个return语句,表示函数的结束,即使有多个只会执行第一个。但在finally语句下,一个函数可能会执行多个return语句,后面的会覆盖前面的return语句;if的每个分支都可以有return语句。
参数
- 缺省参数:有实参时,就使用实参值,没有时使用默认的值。
- 位置参数必须放在关键字参数(参数名=…)的后面,缺省参数放在可变参数后面(关键字参数、位置参数、可变参数、缺省参数)
- 可变位置参数表示方法:*args(多出来的参数以元组的形式保存在args变量中)
- 可变关键字参数表示方法:**kwargs(多出来的参数以字典形式保存)
lambda匿名函数
x = lambda x, y: x * y
print(x(1, 2))
偏函数
一个函数会有一个或多个默认参数,此时可以调用函数时可用更少的参数,降低函数调用的难度。偏函数可以通过调用系统 functools 模块执行, 偏函数 partial 应用函数在执行时,要带上所有必要的参数进行调用
import functools
# int类转化时,base是默认参数,默认十进制
int_base = functools.partial(int, base = 2) #创建一个偏函数,参数依次为函数名和默认参数,此时函数int_base的参数base默认值是二进制
print(int_base("101")) #说明101是二进制形式,打印结果为十进制5
#
print(int_base("101", base = 10)) #说明101是十进制形式,打印结果为十进制101