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的主要内容,如果未能解决你的问题,请参考以下文章

python之集合学习笔记

集合set内部常用功能和使用方法-课堂笔记及课后总结

Python-集合学习笔记(完)

集合论与图论 图论部分 笔记总结

python集合以及数据类型的总结

set 集合