一,函数的定义与调用:
当你在写程序时,有一个模块一直用的是相同的的代码,所以我们为了提高代码的效率和代码的重用,所以把具有独立的代码块组织为一个小模块,我们把他叫为函数。在 Python 中,函数是一段可重复使用的代码块,用于执行特定的任务。它通过def
关键字来定义函数。
def greet():
print("Hello!")
解释一下上面代码:
这里def
是定义函数的关键字,greet
是函数名,后面的括号()
可以包含参数(这个函数没有参数),最后的冒号:
表示函数体的开始。函数体是缩进的代码块,这里只有一行代码print("Hello!")
,它会在函数被调用时执行。
调用函数:我们把函数定义好(功能完善)后,需要让他执行(当然如果你不需要他,你不调用他就不会运行的),所以我们就需要调用它
调用的方法:函数名(),就已经调用成功了
#定义函数
def greet():
print("Hello!")
#调用函数
greet()
#输出结果:
Hello!
!注意:
每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了
当然了如果函数中执行到了return也会结束函数
二,函数参数:
函数可以有零个或多个参数。参数是传递给函数的值,它们允许函数接受输入
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参
def greet(a,b):
num=a+b
print(num)
greet(55,66)
默认参数值:调用函数时,缺省参数的值如果没有传入,则取默认值
。
def power(base, exponent = 2):
print(base ** exponent)
power(3)
power(3,3)
代码分析:
这个函数计算一个数的幂。如果只传入一个参数,如power(3)
,那么exponent
会使用默认值2
,函数返回3**2 = 9
。如果传入两个参数,如power(3, 3)
,则会按照传入的值计算3**3 = 27
。
可变参数:有时候不确定会传入多少个参数,可以使用可变参数。例如*args
用于接收任意数量的位置参数,这些参数会被打包成一个元组!。
注意: 加了星号(*)的变量args会存放所有未命名的变量参数,args为元组
加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
def print_args(*args):
for arg in args:
print(arg)
print_args(1,2,3)
调用print_args(1, 2, 3)
时,1
、2
、3
会被打包成一个元组(1, 2, 3)
,然后在函数内部通过循环打印出来。
注意当你用的是(*age)时,不能用名字传参,只能用位置传参
def ko(a,b,c='xixi',*ke,**ki):
print(a)
print(b)
print(c)
print(ke)
print(ki)
ko(ke=(3,4,5),a=1,b=2,ki="name='frank'") #名字传参会导致(*ke)里面没有数据
ko(1,2,3,4,5,ki="name='frank'") #位置传参,成功
**kwargs
用于接收任意数量的关键字参数,这些参数会被打包成一个字典。
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(key, value)
print_kwargs(name='Alice', age=25)
调用print_kwargs(name='Alice', age=25)
时,关键字参数会被打包成字典{'name': 'Alice', 'age': 25}
,然后在函数内部通过循环打印出键值对。
注意!当你需要用字典的名字来当函数的参数时(函数名(**字典名))
def an(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
my_an={'name':"Alice", 'age':25}
an(**my_an)
三,函数的返回值:
函数可以返回一个或多个值。使用return
关键字来返回结果。
可以理解为:我让小弟帮我干活,当小弟干完之后,我需要他给我今天的营业报表,此时营业报表就是要返回(return)给我的值
def divide(a, b):
if b == 0:
return None
else:
return a / b
# 调用函数
result = divide(4, 0)
print(result) # 这将打印出 None
这个函数用于计算两个数的除法。如果除数b
为0
,则返回None
,否则返回a
除以b
的结果。函数也可以返回多个值,例如:
def get_name_and_age():
name = "Bob"
age = 30
return name, age
result = get_name_and_age()
print(result)
调用这个函数result = get_name_and_age()
时,result
会得到一个包含两个元素的元组('Bob', 30)
。
小案例:封装⼀个函数,参数有两个num1,num2,求两个数的四则运算结果。思路:(四则运算:加、减、乘、除)(当然要返回多个值)
def size(num1, num2):
jia = num1 + num2
jian = num1 - num2
cheng = num1 * num2
chu = num1 / num2
return jia, jian, cheng, chu
# 调⽤size⽅法
print(size(20, 5))
四:函数的说明文档:
说明文档的作用:可以想到与程序员写程序的时候,代码多且复杂,就需要在代码旁边注释,当然说明文档也是一样的,只不过是相当于在函数里面写注释,便于调用者或者他人理解。
格式与规范:
通常使用三引号("""
或 '''
)来包裹说明文档的内容,放置在函数定义的下方紧接着的位置。
def add_numbers(a, b):
"""
这个函数用于计算两个数的和。
参数:
a (int或float):要相加的第一个数。
b (int或float):要相加的第二个数。
返回值:
int或float:a和b相加的结果。
"""
return a + b
查看说明文档的方式:
使用 __doc__
属性:
在 Python 中,每个函数对象都有一个 __doc__
属性,通过访问它可以获取函数的文档字符串内容。
print(add_numbers.__doc__)
使用 help()
函数:
help
函数是 Python 内置的用于查看帮助信息的工具,传入函数名作为参数时,它会以一种更友好、格式化的方式展示函数的文档字符串以及其他相关信息(如函数所在的模块等,如果有相关信息的话)。
help(add_numbers)
五:函数的嵌套:
函数的嵌套就是:一个函数里面又调用了另一个函数
def testB():
print('---- funsB开始 ----')
print('这里是testB函数执行的代码...(省略)...')
print('---- funsB结束 ----')
def testA():
print('---- funsA开始 ----')
testB()
print('---- testA结束 ----')
testA()
输出结果为:
小结:如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置
六:局部变量与全局变量:
在Python中,定义在函数外部的变量就称之为全局变量;定义在函数内部变量就称之为局部变量。
定义:全局变量:在函数外部定义的变量称为全局变量。全局变量的作用域是从定义的位置开始,到整个程序文件结束。全局变量能够在所有的函数中进行访问(如果有适当的权限)。
variable = 10
def access_variable():
print(variable)
access_variable()
在这个例子中,variable
是一个全局变量,它在函数access_variable
外部定义。函数access_variable
可以访问这个全局变量并打印它的值。
定义:局部变量:在函数内部定义的变量称为局部变量。局部变量的作用域仅限于定义它的函数内部。一旦函数执行结束,局部变量就会被销毁。
def local_variable_example():
local_variable = 5
print(local_variable)
local_variable_example()
print(local_variable) # 这会导致错误,因为local_variable在函数外部不存在
小总结
局部变量,就是在函数内部定义的变量
其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了
(1)当全局变量也局部变量的命名相同时怎么办:
这是因为 Python 的作用域规则规定,函数内部的变量查找首先从局部作用域开始。它会先查找函数内部定义的变量,只有在找不到局部变量的情况下,才会去考虑全局变量。
global关键字:
globl关键词可以在局部变量直接改变全局变量
# 定义全局变量num = 10
num = 10
# 定义⼀个函数func
def func():
# 尝试在局部作⽤域中修改全局变量
num = 20
# 调⽤函数func
func()
# 尝试访问全局变量num
print(num)
总结:在函数体内部理论上是没有办法对全局变量进⾏修改的,所以⼀定要进⾏修改时,需要使⽤ global 关键字
nonlocal关键词:
当函数嵌套时,内部函数的局部变量想改变外部函数的局部变量时,就要用到nonlocal关键词
def out():
sum="我是外部函数的数据"
print(sum)
def pas():
nonlocal sum
sum='我改变成了内部函数的数据'
print(sum)
pas()
out()
七:函数的拆包(元组与字典)
Python拆包:就是把元组或字典中的数据单独的拆分出来,然后赋予给其他的变量。 拆包: 对于函数中的多个返回数据, 去掉元组, 列表 或者字典直接获取⾥⾯数据的过程。 总结:元组的解包!def size(num1, num2):
jia = num1 + num2
jian = num1 - num2
cheng = num1 * num2
chu = num1 / num2
return jia, jian, cheng, chu
# 调⽤size⽅法
yi,yo,yu,ty=size(20, 5)
print(yi)
print(yo)
print(yu)
print(ty)
#25
#15
#100
#4.0
总结:
拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
除了对元组拆包之外,还可以对列表、字典等拆包
案例!!!
第一个:假如从键盘输入了一长串的字符串,要求实现创建一个能够生成长度为6的随机验证码的函数
def yan(a):
num=""
if a != 0:
Q=len(a)
import random
print('验证码是:', end='')
for i in range(6):
b = random.randint(1,Q-1)
c = a[b:b+1:1]
num += str(c)
print(num)
a = input("请输入")
yan(a)
思路:
第一需要从键盘输入字符串(可以想到:input()),第二随机!我们现阶段学习的可以随机的只有random,第三从随机的里面挑六个字符(可以想到切片或者索引,循环六次并且切片或者索引六次)
标签:函数,Python,variable,参数,print,全局变量,def From: https://blog.csdn.net/2301_78209919/article/details/144621588