Python基础——函数方法,匿名函数lamada表达式

本文记录了本人在学习过程中想记录的一些知识

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]
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页