Python之函数【中】
1、函数的返回值
示例:
# 定义摄氏度函数
def c_temp():
c_t = 14
print(f"今天的摄氏度:{c_t}")
# 如果不做任何返回,默认返回值为None
# 将c_t返回到该函数的调用处
return c_t
# 定义华氏度函数
def f_temp(c_t):
f_t = round(c_t/1.8 + 32, 2)
print(f"今日的华氏度:{f_t}")
if __name__ == '__main__':
# 注意1:函数在定义完之后,统一在最后去调用
c_t_two = c_temp()
f_temp(c_t_two) # 实参
2、函数多个返回值
示例:
def test_one():
a, b, c = (1, 2, 3)
# 函数当中有多个return不会报错,但是只执行第一个
# return a
# return b
# return c
# 相当于将a,b,c打包返回,元组
return a, b, c
# res = test_one() # tuple
# print(res)
a, b, c = test_one() # 拆包
print(a)
print(b)
print(c)
3、函数作用域介绍
示例:
"""
注意:if判断,循环控制是没有作用域的概念。
"""
# if True:
# a = 5
#
#
# print(a)
# for i in range(3):
# print("hello")
#
#
# print(i)
# def test_one():
# # 局部变量,该变量的作用域在函数体内部
# a = 5
#
#
# print(222, a)
# test_one()
# 全局变量
a = 100
def test_one():
print(f"a = {a}") # 在局部没有时,则取全局变量中找。100
def test_two():
a = 200 # 局部变量
print(f"a = {a}") # 当局部有该变量时,则优先局部的。200
test_one()
test_two()
4、函数作用域注意点
示例:
# global
a = 10
def test_one():
print(f"a = {a}") # 10
def test_two():
# a = 20 # 初始化一个局部变量
# 局部变量-->全局变量
global a
a = a + 10
# a += 10
print(f"a = {a}")
test_one()
test_two()
5、函数作用域LEGB
示例:
# built-in 只要在python环境中即可使用,了解。
# int()
# global
a = 11
def outer():
b = 5 # enclosing
def inner():
# nonlocal是将local声明为enclosing
nonlocal b
b = 6 # local
print(b)
inner()
print(b)
outer()
输出结果:
6、函数执行注意点
案例:
"""
1.代码从上至下执行
2.函数只有在调用的时候才会执行
3.函数执行完毕,则返回到函数的调用处
"""
def test():
print("--5--")
return None
def test2():
print("--3--")
test()
print("--4--")
def test3():
print("--1--")
test2()
print("--2--")
# 1 3 5 4 2
test3()
7、递归函数.
示例:
# 实现阶乘
# n! = 1*2*3*...*n
# 3! = 1*2*3
# # 计数器
# i = 1
# res_nums = 1
# while i <= 3:
# res_nums *= i
# # res_nums = res_nums * i # 1*1*2*3
# i += 1
#
#
# print(f"3!={res_nums}")
# 使用递归实现,在函数内部调用自己
# 递归没有结束条件,一定要自己设定结束条件
# 能够用递归实现的,都可以用循环实现,递归效率低所以很少使用
def get_nums(num):
if num > 1:
return num * get_nums(num-1)
else:
return 1
# 4 * 3 * 2 * 1
res = get_nums(3)
print(res)
8、内置模块中的方法
示例:
# 实现:返回1-10的奇数列表
# 1.取出 1~10 每一个数
# 2.判断,奇数则添加到列表当中
# li = []
# for i in range(1,11):
# # i % 2 --> 1 奇数
# # i % 2 --> 0 偶数
# if i % 2 == 1:
# li.append(i)
#
#
# print(li)
# li = []
# for i in range(1, 11, 2):
# li.append(i)
#
#
# print(li)
# def is_odd(n):
# # 布尔值,不管bool值为True还是False,都会返回出去。是filter做了过滤的操作。
# return n % 2 == 1
#
#
# # filter函数,将range(1,11)中每个元素传到is_odd方法中进行条件判断,将结果为True的构建新的filter对象
# print(list(filter(is_odd, range(1, 11))))
# 阶乘实现:1.循环 2.递归 3.reduce
# functools是内置的模块,所以不需要pip安装
from functools import reduce
def multi(x, y):
return x * y
# 相当于将1,2先传入到multi中,进行乘积返回,再将该结果与3传进入进行乘积返回...依次往后
# 注意:是两两传入..
print(reduce(multi, range(1, 4))) # [1,2,3]
9、匿名函数
示例:
# 自定义函数
# def f(x):
# return x * x
#
#
# print(f(3))
# lambda 形参:返回值
# f = lambda x, y: x * y
# print(f(2, 5))
# from functools import reduce
# # print(reduce(lambda x, y: x*y, range(1,7)))
# # 匿名函数作为返回值
# def fx(i, j):
# # 返回的匿名函数
# return lambda :i*j
#
#
# f = fx(6, 6) # lambda :i*j
# print(f()) # 函数只有在调用时才会执行
# 匿名函数作为实参
# def test(a, b, func):
# res = func(a, b) # 11 + 22
# return res
#
#
# nums = test(11, 22, lambda x,y:x+y)
# print(nums)
# [4,-2,3,1] --> [1,-2,3,4]
# [4,2,3,1] --> [1,2,3,4] --> [1,-2,3,4]
li = [4, -2, 3, 1]
# key:指定排序规则,排序之后返回原元素
li.sort(key=abs)
print(li)
作业
题1
方法1:
infors = [{'name': 'qian', 'age': 28}, {'name': 'amy', 'age': 20}, {'name': 'james', 'age': 25}]
print(sorted(infors, key=lambda infos: infos['name']))
方法2
infors = [{'name': 'qian', 'age': 28}, {'name': 'amy', 'age': 20}, {'name': 'james', 'age': 25}]
infors.sort(key=lambda x: x['name'])
print(infors)
题2
user_input_one = int(input('用户请输入第1个数:'))
user_input_two = int(input('用户请输入第2个数:'))
user_input_three = int(input('用户请输入第3个数:'))
def number_sum(a, b, c):
sum = a + b + c
print(f"用户输入的三个数的和为:{sum}")
avg = number_avg(sum)
print(f"平均数为:{avg}")
def number_avg(sum):
return sum / 3
if __name__ == '__main__':
number_sum(user_input_one, user_input_two, user_input_three)
题3
l = ["jack", ("tom", 23), "rose", (14, 55, 67)]
# isinstance(data,(type1,type2)):函数来判断一个对象是否是一个已知的类型,类似 type()。
def show_msg(data):
if isinstance(data, (str, int)):
print(data)
else:
for item in data:
show_msg(item)
show_msg(l)
运行结果: