函数定义
Python通过def定义函数,函数主体以Tab键或四个空格开始,不一定紧挨上一行。但需要严格遵从格式,若不是以Tab或四个空格开始,运行会报错
def TestFunc():
print("Test func")
执行结果
Test func
获取函数名
获取函数名有两种方法,函数内获取的方法需要sys模块
执行结果
import sys
def TestFunc():
print("Test func:",sys._getframe().f_code.co_name)
TestFunc()
print("get name:",TestFunc.__name__)
Test func: TestFunc
get name: TestFunc
匿名函数lambda
通过简短的函数形式,不用直接定义函数名,在代码中嵌入函数,关键字lambda
传参为x,返回值为 x * x
List = list(map(lambda x: x * x, range(2,8)))
print(List)
执行结果
[4, 9, 16, 25, 36, 49]
函数传参
默认参数
函数传参可以与C++一样支持设置默认参数
def DefaultFunc(x,y = 3):
print("num add :",x + y )
DefaultFunc(4)
DefaultFunc(2,6)
执行结果
num add : 7
num add : 8
可变参数
C/C++通过函数定义 … 来传入可变参数,但Python更灵活,与C/C++一样,可变参数按照传入的先后顺序获取。
def DynamicFunc(*valueArray):
for value in valueArray:
print("value :",value )
print("Func end")
DynamicFunc(2)
DynamicFunc(2,3,5,7,11,13)
Nums1 = [17,19,23,29]
Nums2 = (31,37,39,41)
DynamicFunc(*Nums1)
DynamicFunc(*Nums2)
执行结果
value : 2
Func end
value : 2
value : 3
value : 5
value : 7
value : 11
value : 13
Func end
value : 17
value : 19
value : 23
value : 29
Func end
value : 31
value : 37
value : 39
value : 41
Func end
在可变参数的基础上,可以指定定义的参数名以及指定具体的参数名。可变参数是将所有的参数装入一个list或tuple中,而指定参数是将这些参数装入一个dict中
def SpecificFunc1(x,y,**other):
print("x:",x)
print("y:",y)
print("other:",other)
if "value1" in other:
print("value1 in other")
else:
print("value1 not in other")
print("Func end")
SpecificFunc1(2,3,value1 = 5,value2 = "Python test")
SpecificFunc1(7,11,value3 = 'A',value4 = 13)
执行结果
x: 2
y: 3
other: {'value1': 5, 'value2': 'Python test'}
value1 in other
Func end
x: 7
y: 11
other: {'value3': 'A', 'value4': 13}
value1 not in other
Func end
指定参数
在可变参数的基础上,指定参数的变量名,不对应的运行将会报错
def SpecificFunc2(x,y,*value,value1,value2):
print("x:",x)
print("y:",y)
print("value1:",value1)
print("value2:",value2)
print("value:",value)
print("Func end")
SpecificFunc2(2,3,5,7,11,value1 = 13,value2 = "Python test")
执行结果
x: 2
y: 3
value1: 13
value2: Python test
value: (5, 7, 11)
Func end
传入非法参数
函数返回
返回变量
函数可以返回一个或多个变量
def TestFuncreturn1():
return 3
def TestFuncreturn2():
return 5,'E',list(range(10))
print(TestFuncreturn1())
print(TestFuncreturn2()
执行结果
3
(5, 'E', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
返回函数
返回函数不能是匿名函数,否则就等于返回该函数本身
def TestFuncreturn3(x = 1):
addValue = 2
def add():
return x * (x + addValue)
return add
def TestFuncreturn4(x = 1):
addValue = 2
return lambda x : x * (x + addValue)
func1 = TestFuncreturn3(3)
func2 = TestFuncreturn4(3)
print(func1(),func1(1), func2(1))
执行结果
15 16 3
内置函数
filter函数
过滤函数filter,通过特定条件过滤掉列表中的元素,返回一个新的列表
获取20以内的奇数
List = list(filter(lambda x: x % 2 != 0,range(20)))
print(List)
执行结果
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
sorted函数
Python的排序函数,默认按照ASCII码从小到大排序,也可以通过制定序列排序
print(sorted(['g','r','V','T','m','H','D']))
#转换大写并反序
print(sorted(['g','r','V','T','m','H','D'],key = str.upper,reverse=True))
print(sorted([5,13,3,-13,-19,-31,11]))
#绝对值排序
print(sorted([5,9,3,-13,49,-31,11],key = abs))
#指定特殊值排序
print(sorted([(7,"Python"),(3,"Test"),(5,"Key")],key = lambda x:x[0]))
执行结果
['D', 'H', 'T', 'V', 'g', 'm', 'r']
['V', 'T', 'r', 'm', 'H', 'g', 'D']
[-31, -19, -13, 3, 5, 11, 13]
[3, 5, 9, 11, -13, -31, 49]
[(3, 'Test'), (5, 'Key'), (7, 'Python')]
map函数
Python的map函数与C++的定义不同,map函数是给予函数与序列的映射关系
将序列中的每个元素映射到函数中计算,并一并返回结果。
print(list(map(lambda x: x ** 2, range(10))))
for value in map(lambda x: x * 3, range(10)):
print("map value:",value)
执行结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
map value: 0
map value: 3
map value: 6
map value: 9
map value: 12
map value: 15
map value: 18
map value: 21
map value: 24
map value: 27
reduce函数
Python的map函数是将序列的两个值迭代映射到函数上,并返回结果。
即将序列的前两个数传入函数,函数计算的结果将成为下一个与第三个值组成传入值。
在Python3.0以上的需要将reduce包含进代码中
from functools import reduce
#1~100的累加
print("1 + 2 + 3 + ... + 100 =",reduce(lambda x, y: x + y, range(1,101)))
执行结果
1 + 2 + 3 + ... + 100 = 5050