1.定义引用
def test(var):
if var == "blueicex":
print("blueicex")
else:
print("other")
test("blueicex")
2.匿名函数 lambda
lambda 只是一个表达式。
语法lambda [arg1 [,arg2,…argn]]:expression
lambda表达式返回一个匿名函数,这个匿名函数可以赋值给一个变量。
匿名函数的返回值是冒号后面的表达式计算得到的结果。
sum = lambda x1,x2:x1+x2
print(sum(1,2))
L=[ lambda x: x * 2,
lambda x: x * 3,
lambda x: x * 4 ]
print(L[0](2))
print(L[1](2))
print(L[2](2))
def f1(x): return x * 2
def f2(x): return x * 3
def f3(x): return x * 4
L=[f1,f2,f3]
print(L[0](2))
print(L[1](2))
print(L[2](2))
key='four'
print(
{
'two':(lambda x: x * 2),
'three':(lambda x: x * 3),
'four':(lambda x: x * 4)
}[key](2)
)
嵌套lambda匿名函数
def f(x):
y=10
return lambda z: x+y+z
3.函数返回值
函数返回值默认为Tuple
def get_birthday1(id):
year = id[6:10]
month = id[10:12]
day = id[12:14]
return year, month, day
def get_birthday2(id):
year = id[6:10]
month = id[10:12]
day = id[12:14]
return [year]
if __name__ == '__main__':
print(get_birthday1('370104198003106655'))
print(get_birthday2('370104198003106655'))
print('test')***————Blueicex 2020/2/22 22:36 blueice1980@126.com***
('1980', '03', '10')
['1980']
test
4.函数默认值
def get_birthday(id, get_age=False):
if get_age:
return 2020 - int(id[6:10])
else:
year = id[6:10]
month = id[10:12]
day = id[12:14]
return year, month, day
5.函数抛出异常
def subtraction(num1, num2):
if not isinstance(num1, (int, float)) \
or not isinstance(num2, (int, float)):
raise TypeError('参数类型错误,参数必须为整数或者小数。') # 设定自定义异常内容
result = num1 - num2
return result
TypeError()为异常类型,括号中可以输入自定义的异常提示。
6.函数嵌套
def f():
L=[]
for i in range(5):
L.append( lambda : i )
return L
嵌套函数的作用域
x=3
def f():
x=4
g()
print("f:",x)
def g():
print("g:",x)
f()
输出
g: 3
f: 4
x=3
def f():
x=4
g()
print("f:",x)
def g():
print("g:",x)
x=6
f()
输出
g: 6
f: 4
x=3
def f():
x=4
def g():
print("g:",x)
print("f:",x)
x=5
return g
f()()
输出
f: 4
g: 5
7.函数返回值
python的函数支持返回多个值。返回多个值时,默认以tuple的方式返回。
两个函数的定义完全等价
def f():
return 1,2
def f():
return (1,2)
a, b = f() # a=1, b=2
(a, b) = f()
赋值给一个变量,将会把整个元组赋值给变量。下面是等价的,a表示整个元组(1,2):
a = f()
(a) = f()
8.丢弃返回值
很多时候,多个返回值并非全都是所需的,这时候需要丢弃某些返回值。python有几种方式只获取部分返回值:
8.1 放在空上下文丢弃返回值
不进行任何赋值,将丢弃所有返回值
#f()的返回值全丢弃
f()
8.2 通过索引丢弃返回值
因为返回值是元组,所以可以通过索引取得某个或某几个返回值
a = f()[0]
b = f()[1]
8.3 使用下划线_丢弃返回值
#丢弃第二个返回值
a, _ = f()
8.4 使用双下划线__或更多下划线丢弃返回值
#丢弃第二个返回值
a, __ = f()
第三种方式"使用下划线"不是很安全,因为下划线_在python中有多种意义。而且正好有两种意义在某些情况下可能会产生冲突。所以,建议使用第四种方式。
9.函数作用域
按照从内到外,从小到大排序。函数作用域有4个层次范围:内部嵌套函数、包含内部嵌套函数的函数自身、全局作用域、内置作用域 。
内置作用域是预先定义好的,在__builtins__模块中。这些名称主要是一些关键字,例如open、range、quit等。
全局作用域是文件级别的,或者说是模块级别的,每个py文件中处于顶层的变量都是全局作用域范围内的变量。
本地作用域是函数内部属于本函数的作用范围,因为函数可以嵌套函数,嵌套的内层函数有自身的内层范围。
嵌套函数的本地作用域是属于内层函数的范围,不属于外层。
X=1
def out1(i):
X=2
Y='a'
print(X)
print(i)
def in1(n):
print(n)
print(X,Y)
in1(3)
out1(2)
处于全局作用域范围的变量有:X、out1
处于out1本地作用域范围的变量有:i、X、Y、in1
处于嵌套在函数out1内部的函数in1的本地作用域范围的变量有:n
当在某个范围引用某个变量的时候,将从它所在的层次开始搜索变量是否存在,不存在则向外层继续搜索。搜索到了,则立即停止。内层范围可以引用外层范围的变量,外层范围不包括内层范围的变量。
内置作用域主要是一些内置的函数名、内置的异常等关键字。例如open,range,quit等。
两种方式可以搜索内置作用域:一是直接导入builtins模块,二是让python自动搜索。导入builtins模块会让内置作用域内的变量直接置于当前文件的全局范围,自动搜索内置作用域则是最后的阶段进行搜索。
一般来说无需手动导入builtins模块,不过可以看看这个模块中包含了哪些内置变量。
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', ...............
'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'su
9.1 变量覆盖
x=3
def g():
print(x) # 引用全局变量x
x=3
def g():
x=2 # 定义并赋值本地变量x
print(x) # 引用本地变量x
9.2 python是解释性语言,没有预编译功能
def g():
print(x)
x=3
g()
报错
UnboundLocalError: local variable 'x' referenced
before assignment
https://www.cnblogs.com/f-ck-need-u/p/9925021.html
————Blueicex 2020/2/22 23:11 blueice1980@126.com