本文记录了本人在学习过程中想记录的一些知识
1.函数
函数的定义类似于C语言中的定义,不过返回的类型会是多样的,可以是列表,元组,函数等。而且函数的参数也更加丰富,可变参数,关键字参数,命名关键字参数是三个新鲜的参数 。
def functionname(parameters):
"函数_文档字符串" # 新颖知识,专门用来对函数进行描述的字符串
function_suite
return [expression]
其中参数定义的顺序必须是:
- 位置参数、默认参数、可变参数和关键字参数
- 位置参数、默认参数、命名关键字参数和关键字参数。
1.1 函数描述
def add(a,b):
"add two numbers " # 该字符串便是用来对函数进行描述的
return a+b
a,b = 1,2
print(add.__doc__ ) # 通过调用Python自带的方法X.__doc__
# X表示自定义函数,doc是document的缩写
这里省去对位置参数和默认参数的描述,其在函数中的位置须分别为第一和第二
1.2 可变参数——*args
def functionname(arg1, arg2=v, *args):
"函数_文档字符串"
function_suite
return [expression]
可变,意味着该位置上对应参数可以是任意个(包括零),且会自动组装成元组
def printinfo(arg1, *args):
print(arg1)
return args
printinfo(10) # 10
p=printinfo(70, 60, 50)
print(type(p)) # <class 'tuple'>
1.3 关键字参数——**kw
def functionname(arg1, arg2=v, *args, **kw):
"函数_文档字符串"
function_suite
return [expression]
关键字参数的个数是任意个的,会自动组装成字典类型
def printinfo(arg1, *args, **kwargs):
print(arg1)
print(args)
return kwargs
p=printinfo(70, 60, 50, a=1, b=2)
print(type(p))
#70
#(60, 50)
#<class 'dict'>
1.4命名关键字参数—— *, nkw
def functionname(arg1, arg2=v, *args, *, nkw, **kw):
"函数_文档字符串"
function_suite
return [expression]
所谓命名就是指定参数名并为其赋值
def printinfo(arg1, *, new, **kwargs):
print(arg1)
print(kwargs)
return new
old =printinfo(70, new=10, a=1, b=2)
print(type(old))
#70
#{'a': 1, 'b': 2}
#<class 'int'>
new =printinfo(70, new=('new',10), a=1, b=2)
print(type(new))
#70
#{'a': 1, 'b': 2}
#<class 'tuple'>
printinfo(70, 10, a=1, b=2) #没有给指定的参数赋值,所以报错
#TypeError: printinfo() takes 1 positional argument but 2 were given
2. 匿名函数——用lamada定义
lambda 关键词定义的匿名函数
lambda argument_list: expression
expression 中没有 return 语句,其表达式本身就将结果直接返回了
匿名函数中参数只能在lambda 辖域内起作用,lamada参数列表之外或全局命名空间里的参数是不能访问的
a = [i for i in range(1,10)]
print(a) #[1, 2, 3, 4, 5, 6, 7, 8, 9]
b =lambda a:a**2
print(b) # <function <lambda> at 0x000002985B6470D8>
y = [b(x) for x in range(1,10)]
print(y) #[1, 4, 9, 16, 25, 36, 49, 64, 81]
2.1 在函数filter中应用匿名函数
filter(function, iterable) 过滤序列,过滤掉不符合条件的元素。这里的function就可以用匿名函数写,内容为过滤的条件
even = lambda x: x % 2 == 0 #过滤条件为偶数
templist = filter(even, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(templist)) # [2, 4, 6, 8]
2.2在函数map中应用匿名函数
map(function, *iterables) 根据提供的函数对指定序列做映射,这里的function为映射的表达式
x1 = map(lambda x: x ** 2, range(1,10))
print(list(x1)) #[1, 4, 9, 16, 25, 36, 49, 64, 81]
x2 = map(lambda x,y: x+y, range(1,5),range(1,5))
print(list(x2)) #[2, 4, 6, 8]