函数(参数,返回值,主函数,全局变量和局部变量,内部函数,文件的操作)
一.参数
-
形式参数与实际参数
- 定义:形式函数内部定义用的参数,实际参数是在调用函数的时候的参数,
- 在函数里面,实际参数会被赋值给形式参数
def func(username,password): #"username"和"password"是函数func的形式参数 if username=="tang" and password==123456: print("登录成功") else: print("账号密码错误") func("tang",123456) #"tang"和123456是实际参数,会被赋值给形式参数 func(username="tang",password=123456)
输出:登录成功 -
函数的形式函数,实际参数的值也可以是函数
def login(username="tang",password=123): if username=="tang" and password==123: return "correct" else: return "error" def profile(a): if a=="correct": print("欢迎访问主页") else: print("登录失败") profile(a=login())
-
def login(username="tang",password=123): if username=="tang" and password==123: return "correct" else: return "error" def profile(a=login()): if a=="correct": print("欢迎访问主页") else: print("登录失败") profile()
-
默认参数
- 定义:在定义函数的时候,给函数的形式参数指定它的默认值
def func(username="tang",password=123456 #默认参数 ): if username=="tang" and password==123456: print("登录成功") else: print("账号密码错误") func()
输出:登录成功
- 调用函数的时候,实际参数的优先级是高于默认参数的
def func(username="tang",password=123456): if username=="tang" and password==123456: print("登录成功") else: print("账号密码错误") func(username="tang",password=1234)
输出:账号密码错误
-
动态参数
- 用途:
1.当定义的函数心事参数的个数不确定的时候 2.定义的函数形式参数的数据类型不确定的时候
- 参数前一个“*”:在函数中会把传的参数转成一个元组。
def func(*args): print(args) print(type(args)) func("python",2,3)
输出:
('python', 2, 3) <class 'tuple'>
- 参数前两个个“*”:在函数中会把传的参数转成一个字典。
def func(**kwargs): print(kwargs) print(type(kwargs)) func(a="python",b=12)
输出:
{'a': 'python', 'b': 12} <class 'dict'>
- 当我们调用被定义动态参数的函数的时候,实际参数如果存在key=value的情况,基本是字典的数据类型,其他的都是元组的数据类型
- 动态参数能解决什么?当一个接口请求参数有时候是2个,有时候是3个或N个,如果按照正常的思维,我们需要编写N个函数,有了动态参数之后,我们只需要编写一个函数就可以了
二.返回值
- 当一个函数里面,有return,那么函数的返回值就是return后面的值
def func(a=1,b=2): if a==1 and b==2: return "正确" else: return "错误" print(func())
输出:正确
- 当一个函数里面,没有return,那么函数的返回值是None
def func(a=1,b=2): if a==1 and b==2: print("正确") else: return "错误"
输出:
正确 None
- 一个函数可以有多个返回值
def func(a=2): y1=a+3 y2=a+6 return y1,y2 print(func())
输出:
(5, 8)
- 返回值的价值:如果在单个的函数角度而言,函数其实有没有返回值无所谓的,但是函数与函数之间需要建立一层关联关系,那么就可以通过函数的返回值把这层关联关系建立起来。
def login(username="tang",password=123): if username=="tang" and password==123: return "correct" else: return "error" def profile(): if login()=="correct": print("欢迎访问主页") else: print("登录失败") profile()
输出:“欢迎访问主页”
三.主函数main
if __name__ == '__main__': profile()
- 设置主函数的目的:指定程序执行的入口
- 在其他编程语言中,执行的代码必须在主函数里面才可以执行,其他的不可以执行,但是python中都可以执行
四.全局变量跟局部变量
-
全局变量:定义的变量作用域是这个Python文件
name="asd" #全局变量
-
局部变量:在函数内部定义的变量,作用域值针对这个函数
def func(): #定义函数 name="admin" #局部变量 print(name)
-
当全局变量和局部变量的变量名称一致时:
- 在函数内部,局部变量的优先级是高于全局变量的
- 在Python文件中,全局变量的优先级是高于局部变量的
name="asd" #全局变量 def func(): #定义函数 name="admin" #局部变量 print(name) func() #调用函数 print(name) #输出变量name
输出:
admin asd
-
global:在函数内部调用全局变量
name="asd" def func(): global name name="tang" print(name) func()
五.内部函数
lambda:匿名函数
a=lambda x,y:x+y print(a(2,3))
filter:过滤函数
-
- 如果我们按照之前的方法把list1大于3的值添加到list2中
list1=[x for x in range(10)] list2=[] for item in list1: if item>3: list2.append(item) print(list2)
- 使用函数和过滤函数添加
list1=[x for x in range(10)] def func(a): if a>3: return True print(list(filter(func,list1)))
- 使用过滤函数和匿名函数添加
list1=[x for x in range(10)] print(list(filter(lambda a:a>3,list1))) print(list(filter(lambda a:a>3,[x for x in range(10)])))
这些代码输出的值都是:
[4, 5, 6, 7, 8, 9]
- 如果我们按照之前的方法把list1大于3的值添加到list2中
map:对所有的对象进行同样的操作
比如我们要对函数"x for x in range(10)"的值都加5
- 使用for循环的方式实现
list1=[x for x in range(10)] list2=[] for item in list1: list2.append(item+10) print(list2)
- 使用函数和map函数实现
list1=[x for x in range(10)] def func(a): return a+10 print(list(map(func,list1)))
- 使用map函数和匿名函数实现
print(list(map(lambda a:a+10,[x for x in range(10)])))
以上三种方式的输出都为:
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
eval:字符串转为表达式
str1="20+10" str2="20*10" print(eval(str1)) print(eval(str2))
输出:
30 200
range:包含开头不包含结尾的范围
for item in range(4,9): print(item)
输出:
4 5 6 7 8
ord:字母转为数字
print(ord("a")) 输出为:97
chr:数字转为字母
print(chr(109)) 输出:m
随机生成字符串:random随机数 import导入
import random #导入库 list1=[] #定义列表list1 for a in range(4): #循环展示4次 r=random.randrange(97,123) #定义对象r赋值为97-123之间的随机数 list1.append(chr(r)) #把取到的r值转为字母添加到列表list1中 print(" ".join(list1)) #以空格合并列表list1的值并输出
random.randrange():从指定范围内,按指定基数递增的集合中获取一个随机数
六.文件的操作
-
文件操作使用的函数是open
-
文件的操作模式
- w:写:open在写文件的时候,首先判断被操作的文件是否存在,如果不存在,就会在内部自动创建一个文件
- r:读:open在写文件的时候,首先判断被操作的文件是否存在,如果不存在,就报FileNotFoundError的错误提示信息
-
文件的操作步骤
- 打开
- 操作
- 关闭
如我们要在helloworld.txt的文件中写“世界你好!”的内容,并读取出来
f=open("log.txt","w",encoding="utf-8") f.write("世界你好!") f.close() f1=open("log.txt","r",encoding="utf-8") print(f1.read()) f1.close()