函数,文件操作

集合: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()

 
posted @ 2021-11-23 20:40  晨^O^黎  阅读(26)  评论(0编辑  收藏  举报