函数
2023-09-20 09:36 渐行渐近丶 阅读(14) 评论(0) 编辑 收藏 举报python函数
一、 函数
1、什么是函数?
函数是组织好的,可重复使用的,用来实现特定功能的代码块,提高程序的复用性、减少重复性代码,提高效率。
# 需求:统计字符串长度,不使用内置函数len()
str1 = "pycharm"
str2 = "test"
str3 = "python"
count = 0
for i in str1:
count += 1
print(f"字符串{str1}的长度是:{count}")
count = 0
for i in str2:
count += 1
print(f"字符串{str2}的长度是:{count}")
count = 0
for i in str3:
count += 1
print(f"字符串{str3}的长度是:{count}")
# 可以使用函数,来优化
def my_len(data):
count = 0
for i in data:
count += 1
print(f"字符串{data}的长度是:{count}")
my_len(str1)
my_len(str2)
my_len(str3)
2、 函数的定义:
函数定义遵循以下规则:
● 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
● 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
● 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
● 函数内容以冒号起始,并且缩进。
● return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
3、函数定义的语法:
def 函数名(传入参数):
“函数_文档字符串”
函数体
return 返回值
4、函数的调用:
函数名()
注意事项:
● 参数如不需要,可以省略;
● 返回值如不需要,可以省略;
● 函数必须先定义后使用
5、函数的传入参数:
函数定义中,提供的x和y,称为:形式参数(形参),表示函数声明将要使用2个参数,参数之间用逗号分隔。
函数调用中,提供的5和6,称为:实际参数(实参),表示函数执行时真正使用的参数值,传入的时候,按照顺序传入数据,使用逗号分隔。
参数的数量不限,形参和实参需一一对应,使用逗号隔开。
例:def add(x, y):
result = x + y
print(f"{x}+{y}的结果是:{result}")
add(5, 6)
6、函数的返回值:
函数的返回值,就是程序中函数完成事情后,最后给调用者的结果,如下,变量r就能接收到函数的返回值
def add(a, b):
result = a + b
return result
r = add(1, 2)
print(r)
注:函数体在遇到return后就结束了,写在return后的代码不会被执行。
二、 函数进阶
1、如果一个函数有多个返回值,按照返回值顺序,使用多个变量接收,用逗号隔开,支持不同类型的return。
def test_return():
return 1, "hello", True
x, y, z = test_return()
print(x)
print(y)
print(z)
2、函数的多种传参使用方式
def user_info(name, age, gender):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
3、位置参数:调用函数时根据函数定义的参数位置来传递参数,注意传递的参数和定义的参数顺序、个数一致。
user_info('tom', 20, '男')
4、关键字参数:调用函数时通过"键=值"形式传递参数,不需要满足顺序要求
user_info(name='tom', age=20, gender='男')
5、缺省参数(默认值):注意默认的参数必须写在最后面
def user_info(name, age, gender='女'):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('小王', 11)
6、不定长参数:也叫可变参数,用于不确定调用时会传递多少个参数,分为两类:位置传递、关键字传递。
位置传递:传进的所有参数都会被args收集,它会根据传进参数的位置合并为一个元组,args是元组类型。
def user_info(*args):
print(f"args参数的类型是:{type(args)},内容是:{args}")
user_info('tom')
user_info('tom', 18)
关键字传递:参数是"键=值"形式,所有的"键=值"都会被kwargs接受,同时会组成字典
def user_info(**kwargs):
print(f"kwargs参数的类型是:{type(kwargs)},内容是:{kwargs}")
user_info(name='tom', age=18, id=100001)
7、函数作为参数传递:这是一种计算逻辑的传递,而非数据的传递
def test_func(compute):
result = compute(1, 2)
print(f"compute参数的类型是:{type(compute)}")
print(result)
def compute(x, y):
return x + y
test_func(compute)
8、 匿名函数:
(1)函数的定义中
def关键字,可以定义带有名称的函数
lambda关键字,可以定义匿名函数(无名称)
有名称的函数,可以基于名称重复使用
无名称的匿名函数,只能临时使用一次
(2)语法:lambda 传入参数:函数体(一行代码)
通过def关键字,定义一个函数,并传入:
def test_func(compute):
result = compute(1, 2)
print(result)
def compute(x, y):
return x + y
test_func(compute)
也可以通过lambda关键字,传入一个一次性使用的lambda匿名函数
def test_func(compute):
result = compute(1, 2)
print(result)
test_func(lambda x, y: x + y)
9、 变量的作用域:
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。
两种最基本的变量作用域如下:全局变量、局部变量。
10、 全局变量和局部变量:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
total = 0 # 这是一个全局变量
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量.
print "函数内是局部变量 : ", total
return total
sum( 10, 20 )
print "函数外是全局变量 : ", total
执行结果: