函数,文件操作
集合:set()
集合是一个数学概念,可以由一个或者是多个确定的元素构成的整体
listA=["1","3","67"] listB=["4","5","12","1","2","3","67"] print("相同的数据:",set(listA)&set(listB)) print("不同的数据:",set(listA)^set(listB)) print("一起的数据:",set(listA)|set(listB))
'''分解出N个信息'''
list7=["python",'google','badu','huawei'] a,*b=list7 print(a) print(b)
输出值为
python
['google', 'badu', 'huawei']
函数
'''定义函数使用关键字def
function
定义规则:
def 函数名称(形式参数):
函数表达式(实际参数)
'''
def add(a,b): print(a+b) add(3,5)
输出结果为8
默认参数:在定义函数的时候,给函数的形式参数指定它的默认值,它的优先级是低于实际参数的。(按实际的执行)
首先我们不给予默认参数,
def login(username,password): '''登录''' if username=='chenli' and password=='123': print('成功') else: print('失败') login(username='chenli',password='123')
我们可以看到是按照我们实际的值进行执行的的
我们在次给函数规定默认值,同时我们再给予实际值
def login(username='chenli',password='admin'): '''登录''' if username=='chenli' and password=='123': print('成功') else: print('失败') login(username='chenli',password='123')
不难发现程序是按照我们实际给予的值执行
返回值:
1、当一个函数里面,有return,那么函数的返回值就是return后面的值
2、当一个函数里面,没有return,那么函数的返回值是None
3、一个函数可以有多个返回值
价值:
如果在单个的函数角度而言,函数其实有没有返回值无所谓的,
但是函数与函数之间需要建立一层关联关系,那么就可以通过
函数的返回值把这层关联关系建立起来。
def login(username='chenli',password='admin'): '''登录''' if username=='chenli' and password=='admin': return True else: return False def profile(): '''个人主页''' if login(): print('欢迎访问') else: print('请获取访问权限') profile()
程序入口:
main主函数在其他编程语言中,执行的代码必须在主函数里可以执行,其他的不可以
Python都可以,设计主函数的目的:指定程序执行的入口
def login(username='chenli',password='123'): '''登录''' if username=='chenli' and password=='123': return True else: return False def profile(): if login(): print('欢迎访问') else: print('请获取权限') if __name__ == '__main__': profile()
动态函数中一个*代表元组两个**代表字典。当我们调用被定义的动态参数的函数时,实际参数如果存在key=value的情况,基本是字典的额数据类型,
非则都是元组
def abcd(*arge,**kwarge): print('arge的类型:',type(arge)) print('arge的内容:',arge) print('keaege的内容:',type(kwarge)) print('kwarge的内容:',kwarge) abcd('1','2',name='chen') abcd(age='23') dict1={'name':'chen','age': '23','sex':'boy'} abcd(**dict1) tuple=(1,2,3) abcd(*tuple)
动态参数能够解决什么
当一个接口请求参数有时候有两个,有时候是三个,有时候是N个,正常情况下需要很多个参数,有动态参数我们只需要写一个函数就行
全局变量&局部变量
局部变量
def asd(): name='qwt' print(name)
全局变量
name='qwe' def asd(): global name asd() print(name)
函数的形式参数也可以是函数
login是一个函数,
profile也是一个函数,它的参数是token=login
def login(username='chenli',password='admin'): '''登录''' if username=='chenli' and password=='admin': return 'asdfghj' else: return False def profile(token): '''个人主页''' if token=='asdfghj': print('欢迎访问') else: print('请获取访问权限') profile(token=login())
匿名函数lambda
a=lambda a,b:a+b print(a(5,9))
输出结果为14
过滤
对0-10 中大于3的进行循环我们正常写法
list2=[] list1=(x for x in range(10)) for i in list1: if i>3: list2.append(i) print(list2)
运用函数我们可以这样写
list1=(x for x in range(10)) def faunc(a): if a>3: return True print(list(filter(faunc,list1)))
或者
list1=(x for x in range(10))
def faunc(a):
if a>3:
return True
print(list(filter(lambda a:a>3,list1)))
或者
list1=(x for x in range(10))
def faunc(a):
if a>3:
return True
print(list(filter(lambda a:a>3,[x for x in range(10)])))
map();对所有对象进行同样的操作
list1=(x for x in range(10)) def func(a): return a+10 print(list(map(func,list1)))
或者
print(list(map(lambda a:a+10,list1)))
或者
print(list(map(lambda a:a+10,[x for x in range(10)])))
eval()字符串转为表达式
str1='5+10' print(eval(str1))
range()包含开始不包含结尾
for i in range(1,7): print(i)
ord()字母转为数字
print(ord('a'))
chr()数字转为字母
print(chr(10))
文件操作
文件操作使用的函数是open
文件操作模式:
w:写
1、open写文件的时候,首先判断被操作的文件是否存在
2、如果不存在,就内部自动创建一个文件
r:读
1、open读取文件的时候,首先判断被操作的文件是否存在
2、如果文件不存在,就报FileNotFoundError的错误提示信息
文件操作步骤:
1、打开
2、操作
3、关闭
写,如果乱码加encoding='utf-8
f=open('文件名','w') f.write('文件输入内容') f.close()
读
f=open('要打开的文件名','r',encoding='utf-8') print(f.read()) f.close()
with上下文,这样比较方便 ,内部自己会对文件进行关闭(单行用write多行写入用writelines,)
with open('chenli.txt','a') as f: f.writelines(''' helloworld hellochina ''') with open('chenli.txt','r') as f: print(f.read()) 读取全部内容
print(f.readlin())只读取第一行
for item in f.read()
print(item.strip()) 按行读取,读取时会有空格去掉空格
def register(): '''注册账号''' username = input('请输入账户:\n') password = input('请输入密码:\n') temp = username + ':' + password f = open('user.txt', 'w') f.write(temp) f.close() def login(): '''登录''' username = input('请输入账户:\n') password = input('请输入密码:\n') f=open('user.txt', 'r') list1 = f.read().split(':') if username == list1[0] and password == list1[1]: print('登录成功') else: print('登陆失败') login()
可以看到
username = input('请输入账户:\n')
password = input('请输入密码:\n')
这部分是重复的,我们可以用函数来减少重复的工作
def adb(): username = input('请输入账户:\n') password = input('请输入密码:\n') return username ,password def register(): '''注册账号''' username ,password=adb() temp = username + ':' + password f = open('user.txt', 'w') f.write(temp) f.close() def login(): '''登录''' username ,password=adb() f=open('user.txt', 'r') list1 = f.read().split(':') if username == list1[0] and password == list1[1]: print('登录成功') else: print('登陆失败') login()