Python基础:函数

1、函数的作用

函数就是将一段具有独立功能的代码整合到一个整体并命令,在需要的位置调用这个函数的名字即可实现相应的功能。

 

2、函数的使用步骤

2.1 定义函数

def 函数(参数【option】):
  代码1
  代码2
 ......

2.2 调用函数

函数名(参数[option])

注意:

  • 不同的需求,函数可有可无
  • 在python中,函数必须先定义后使用

 

3、函数参数的作用

# 定义函数
def add_sum1():
  result = 1 + 2
  print(result)
 
# 调用函数
add_sum1()

思考: 上述 add_num1 函数只能完成数字1和2的加法运算,如果想要这个函数变得更通用,可以计算任何用户指定的两个数字的和,如何书写程序?

# 定义函数时同时定义了接收用户指定数据的参数a和b,a和b是形参
def add_sum1(a,b):
  result = a + b
  print(result)
# 调用函数时传入了真实的数据10,20,真实的数据为实参 add_sum1(10,20)

 

4、函数的返回值

 return a,b 写法,返回多个数据的时候,默认是元组类型。

 return后面可以连续列表,元组或者字典,以返回多个值。比如: return [a,b] 

 

5、函数的说明文档

定义函数的说明文档

def 函数名(参数):
'''
说明文档的位置
'''
  代码
 ...

示例如下:

#求和函数
def sum(a,b):
  '''
 求和函数
 :param a:
 :param b:
 :return: a+b
 '''
  return a + b

 

6、变量的作用域

 

 7、函数的参数

7.1 位置参数

调用函数的时候根据函数定义的参数位置来传递参数,传递和定义参数的顺序及个数必须一致

def userinfo(name,age):
    print(f'姓名:{name},年龄:{age}')

if __name__ == '__main__':
# 按照位置传递参数
userinfo('xiaihong', 18)

 

7.2 关键字参数

 函数调用,通过’键=值‘形式加以指定。

注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。


def userinfo(name,age):
    print(f'姓名:{name},年龄:{age}')
if __name__ == '__main__':
  # 按照关键字传递参数的方式
  userinfo(age=8,name='夏红')

 

7.3 缺省参数

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值。

注意:所有位置参数必须出现的默认参数前,包含函数定义和调用。缺省参数排在最后。

函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值。

def user_info(name,age,gender=''):
    print(f'您的名字是{name},年龄是{age},性别是{gender}')
if __name__ == '__main__':
  user_info('bull',18) # 调用函数,使用默认参数,不传gender
user_info('tom',age=23,gender='男') # 调用函数,更改默认的参数值

 

7.4 不定长参数

也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以的)场景。此时可以用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

7.4.1 不定长位置参数*args

传进的所有参数都被args变量收集,它会根据传进参数的位置合并成一个元组。 *args表示该函数的参数个数是不确定的,最少0个。如果参数不仅仅只有不定长参数,那么不定长参数需要放在最后。

def user_info(*args):
    print(args)

user_info('tom',90) # ('tom', 90)

7.4.2 不定长关键字参数

关键字的不定长参数,需要排在普通参数后面。kwargs是字典类型。不定长位置参数和不定长关键字参数定义时,不定长位置参数应该在前,不定长关键字参数应该在后面

def user_info(**kwargs):
    print(kwargs)

user_info(name='tom', age=10, gender='男') # 返回的结果是{'name': 'tom', 'age': 10, 'gender': '男'}

 

8、匿名函数

8.1 lambda的应用场景

如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。匿名函数通常会用在其他函数的临时处理中,作为参数传递给其他函数。

8.2 lambda的语法

def add(a,b):
    return a+b

print(lambda a,b: a+b) # 打印的是一个函数对象<function <lambda> at 0x0000023369A4DF70>

aaa = lambda a,b: a+b
print(aaa(10, 20)) # 定义了一个匿名函数,给他起了一个名字叫aaa,调用时直接调用res并且给他传参9、

 

9、部分高阶函数

9.1 map()

map() 会根据提供的函数对指定序列做映射。

语法:

map(function,iterable,....)  

 map('完成二次方计算的函数',list1)

 # 第一个参数是函数对象,第二个参数是要处理的迭代数据,执行时,会将可迭代数据中的每一个数据传给函数对象,由他进行处理,等到新的结果

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。如果要转换为列表,可以使用list()来转换

练习题:有一个列表 list1 =  [10,20,30,3],计算列表中每个数据的二次方,返回一个新列表

list1 = [10,20,30,3]

# 使用高阶函数map完成
def ercifang(i)
    return i**2
result = map(ercifang, list1)   # map里面会根据函数名称去找函数对象
print(list(result))             [100, 400, 900, 9]

# 使用lambda函数完成
result = map(lamdbs x:x**2,list1)
print(list(result))

 

9.2 reduce()

reduce()函数会对参数序列中元素进行累积。其中func必须有两个参数。每次func计算的结果继续和序列中的下一个元素做累积计算。

reduce(func(x,y),lst)

注意:

  • reduce()传入的参数func必须接收2个采纳数
  • reduce是要从functools里面去导包的

练习题:就是那列表中所有项乘起来的结果,list1 = [2,5,7,1,4,7,3]

list1 = [2,5,7,1,4,7,3]

res1  = reduce(lambda x,y:x**y, list1)
print(res1)

 

9.3 filter()

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果需要转换为列表,可以使用list()来转换.

filter(func,lst)

练习题:筛选出列表中的偶数项,list1 = [1,2,3,4,5,6,7,8,9,10]

list1 = [1,2,3,4,5,6,7,8,9,10]

res = filter(lambda x:x%2==0,list1)
print(list(res))

 

9.4 sorted()

排序

练习题:

students = [{'name':'张三','score':90},{'name':'李四','score':57},{'name':'王五','score':80}]

# 根据得分反向排序
res = sorted(students,key=lambda stu:stu['score'],reverse=True)  # 第一个参数是可迭代对象,key表示的就是要以谁作为排序的依据
print(res)   # [{'name': '张三', 'score': 90}, {'name': '王五', 'score': 80}, {'name': '李四', 'score': 57}]

list1 = [5,10,9,10,2,1]
print(sorted(list1)) # 默认使用整体作为排序依据的,上述列子中修改了key

 

posted @ 2023-03-17 14:37  阳光倾林  阅读(98)  评论(0编辑  收藏  举报