Python笔记总结week3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python笔记总结week3相关的知识,希望对你有一定的参考价值。
Set集合: 无序,不重复的序列
a. 创建
se = {"123,"456" } print(type(se))
#创建集合方式 s1 = se = {"123,"456" } s2 = set() s3 = set([1,2,1,2])
b.功能
set() 创建一个空集合 #e.g. list() 类后面加括号:可用于将tuple变list, 执行list_init_,内部会执行一个for循环,将tuple中每个元素单个添加进新的列表.类似地,列表也可以转换成集合: li = [1,2,1,2] s1 = set(li)
c.操作集合
增加
s = set() s.add(123) s.add(123) s.add(123) #无论增加多少,集合中只有一个123
删除
s.clear()
差集
s1 = {11,22,33} s2 = {22,33,44} s3 = s1.difference(s2) #s1中存在,s2中不存在 s3 = s2.difference(s1) #返回{44}
对称差集
s3 = s1.asymmetric_difference(s2)
移除某元素
s1 = {11,22,33} s3 = s1.discard(111) #不存在该元素不报错 s3 = s1.remove(111) #不存在会报错 ret = s1.pop() #随机移除一个元素,会返回值到ret pop不支持加参数
Intersection交集
s3 = s1.intersection(s2) #不分前后,找交集
s1.intersection_update(s2) #直接返回给s1,更新s1
Union并集
s2 = s1.union(s2)
增加元素
s1 = {11,22,33} s1.add(1) li = [1,2,3,4,5] s1.update(li) #增加元素可以for循环,可迭代的东西; 批量添加(列表,元组,字符串都可以)
函数function
1.def 关键字,创建函数
2.函数名
3.()
4.函数体:函数定义时,函数体不被执行的,只在调用的时候才执行
5.返回值
#函数中,一旦执行return,执行终止 def f1(): print(123) return 22 print(111) #will not be executed #如果没有写返回值,返回结果为None
6.参数
形式参数: def hhh(a)
实际参数 : 实际要代入函数的参数
参数种类:
1.普通参数
2.默认参数(必须放在参数列表最后)
3.指定参数
4.动态参数
*args默认将纯如的参数全部放置在元组中 f1(*[1,2,3,4])
**kwargs默认将纯如的参数全部放置在字典中 f1(**{"k1":"v1","k2":"v2"})
def sendmail(a,b): print("Your email has been sent:",a,b) return True sendmail("alex","andy") #普通参数 def sendmail1(a,b,kk="thx"): print("Your email has been sent:",a, b,kk) return True sendmail1("alex","andy") #默认参数 def sendmail2(a,b): print("Your email has been sent:",a, b) return True sendmail2(a = "alex",b = "thanks") #指定参数
格式与动态参数
#格式化 str. format() #str format 格式化输出 s1 = "I am {0}, now {1} years old".format("Alex", 18) s2 = "I am {0}, now {1} years old".format(*["Alex", 18]) print(s1,s2) #same reults
def f1(*args): print(args) return True f1(1,23,4,5,6,7,8,9,0,8) #args把所有参数当作一个元素做for循环添加到一个元组 li = [1,23,4,5,6,7,8,9,0,8] f1(li) f1(*li) #万能参数 def f1(*args, **kwargs): print(*args, **kwargs) return True dic = {"a":1,"b":2} f1(li,dic) s1 = "I am {0}, now {1} years old".format("Alex", 18) s2 = "I am {0}, now {1} years old".format(*["Alex", 18]) print(s1,s2) s1 = "I am {name}, now {age} years old".format(name = "Alex", age = 18) dic = {‘name‘:‘Alex‘,‘age‘:18} s2 = "I am {name}, now {age} years old".format(**dic) print(s1,s2)
引用: 函数传参数的时候穿的是引用(不是值)
def f1(a1,a2): return a1+a2 def f1(a1,a2): return a1*a2 ret = f1(8,8) print(ret) #函数返回值为64,第二个函数覆盖了前一个 def f1(a1): a1.append(999) return a1 li = [1,2,3,4] #传参数的时候传的是个引用(不是值) f1(li) #li变了 print(li)
全局变量,作用域:
没有写到函数中的变量叫全局变量,所有的位置和作用域里面都可读
局部变量,只能在函数自己,优先读函数自己的变量,没有的话全局找
最好不要有很多隐含的全局变量,不然很难追踪;全局变量需要先声明再用
NAME = "Alex" #表示全局变量 def f1(name,age): global NAME name = "Mo" #表示NAME是全局变量,必须加global才能重新赋值 print(name,age)
def f2(name,age): print(name,age) f1(NAME,9) #改变了全局变量,改为"Mo" f2(NAME,10) #全局变量仍指向"Alex" #如果全局变量是列表或字典,只能修改,不可重新赋值
#全局变量全要大写
#注意函数之间空两行
登录、注册程序(函数应用)
def login(username,password): ‘‘‘ For user login purpose :param: username: 用户输入用户名 :param: password: 用户输入密码 :return: True: 登录成功; False: 登录失败 ‘‘‘ #param:username,password) #True,login sucessfully #False, login failed f = open("db", "r") for line in f: line_list = line.split("|") if line_list[0] == username and line_list[1] == password: return True return False def register(username,password): ‘‘‘ For user register purpose :param: username: 用户输入用户名 :param: password: 用户输入密码 :return: file to restore new user info ‘‘‘ f = open("db","a") temp = "\n" + username + "|" + password f.write(temp) f.close() return f def main(): t = input("1: login; 2: register") if t == "1": username = input("username:") password = input("password:") r = login(username,password) if r == True: print("Welcome login") else: print("login failed") elif t == "2": username = input("username:") password = input("password") r2 = register(username,password) main()
关于Built-in functions
abs(-39) #绝对值 # 0 "" [] {} () None are False print(bool(0)) n = all([1,2,3,4]) #全部为真才为真 print(n) any([0]) #只要有真则为真 print(bin(9)) #十转二进制, 0b print(oct(9)) #十转八进制, 0o print(hex(9)) #十进制转十六进制, 0x #汉字转字节(只要转换的字符串,按照什么编码) n = bytes("李杰",encoding="utf-8") #utf-8一个汉字占3个字节 gbk:一个汉字占两个字节; 一个字节8位 print(n) n = bytes("李杰",encoding="gbk") print(n) #字节转换成字符串 new_str = str(bytes("李杰",encoding="utf-8"),encoding="utf-8") print(new_str)
配置文件
#打开文件 f = open("db",‘r‘) #只读 f = open("db",‘w‘) #只写,先清空原文件 f = open("db",‘x‘) #文件存在,报错;如果不存在,创建文件并写内容 f = open("db",‘a‘) #追加 #分别加+ 可读可写,会覆盖之前的内容,一般都会用r+ f = open("db",‘r+‘,encoding="utf-8") #如果打开模式无b,按照字符读取 data = f.read() f.tell() #tell 当前指针位置 f.seek(1) #指针调到第一个位置,永远按字节找 f.seek(f.tell()) #调整当前指针位置 f.write() #从当前指针位置开始覆盖 #操作文件 read()#无参数,读全部;有参数 data = f.read() #硬盘底层保存二进制,我们得到的是字符串,python自动转换底层二进制到字符串 print(data,type(data)) f = open("db",‘r‘,encoding = "gbk") #如果打开发现乱码,很可能因为 encoding出问题, 尽量统一用utf-8 f = open("db",‘rb‘) #取0101写0101 data = f.read() print(data,type(data)) #写字符串,让python去做转换 f = open("db",‘a‘) f.write("李杰") f.close() #直接写字节 f = open("db",‘ab‘) f.write(bytes("李杰",encoding="utf-8")) f.close()
read() # 无参数,读全部;有参数, # b,按字节 # 无b,按字符 # tell() 获取当前指针位置(字节) # seek(1) 指针跳转到指定位置(字节) # write() 写数据,b,字节;无b,字符 # close # fileno # flush 强刷 # readline 仅读取一行 # truncate 截断,指针为后的清空 # for循环文件对象 f = open(xxx) # for line in f: # print(line) #读一行写一行 with open(‘db1‘, ‘r‘, encoding="utf-8") as f1, open("db2", ‘w‘,encoding="utf-8") as f2: times = 0 for line in f1: times += 1 if times <=10: f2.write(line) else: break
三目运算与lambda函数
###################三目 if 1 == 1: name = "Alex" else: name = "SB" name = "Alex" if 1 == 1 else "SB" #######################Lambda def f1(a1): return a1 + 100 f2 = lambda a1: a1 + 100 #只能写一行:函数名称 lambda 参数: 函数体 ret1 = f1(10) print(ret1) ret2 = f2(10) print(ret2)
以上是关于Python笔记总结week3的主要内容,如果未能解决你的问题,请参考以下文章