python学习笔记-Day3

Posted Cool King

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记-Day3相关的知识,希望对你有一定的参考价值。

Set  无序,不允许重复的序列

a. 创建一个set集合

se = {"123","456"}   
se = set()    #创建一个空的集合
se = set([11,22,33,4])  #将其它可迭代的序列转换为集合

b. 集合(set)方法

# add方法
s = set()
s.add(123)
s.add(123)
s.add(123)
print(s)
#==> {123}   
# set不保存重复的项目,当add存在的项目,则不去添加

# 比较方法
# difference方法
s1 = {11,22,33}
s2 = {22,33,44}
diff = s1.difference(s2)
print(diff)
#==> {11}  
# s1对比s2,输出s1中存在且s2不存在的


# symmetric_difference
s1 = {11,22,33}
s2 = {22,33,44}
s = s1.symmetric_difference(s2)
print(s)
#==> {11, 44}  
# s1与s2对比,输出s1与s2互相不存在的值


# difference_update
s1 = {11,22,33}
s2 = {22,33,44}
s = s1.difference_update(s2)
print(s,s1,s2)
#==>None {11} {33, 44, 22}  
# 此方法并不返回值,所以s值为none,直接将s1中存在s2中不存在值重新赋值给s1


# symmetric_difference_update
s1 = {11,22,33}
s2 = {22,33,44}
s = s1.symmetric_difference_update(s2)
print(s,s1,s2)
#==> None {11, 44} {33, 44, 22} 
# 同样Update方法不返回值,将s1与s2互相不存在的值重新赋值给s1

# 移除方法
# discard 
s1 = {11,22,33}
s1.discard(11)
s1.discard(44)
print(s1)
# ==> {33, 22}
#移除元素方法,移除不存在元素时,不报错


# remove
与discard相同,移除不存在元素,报错
所以建议使用discard


# pop
s1 = {11,22,33}
s =  s1.pop()
print(s)
print(s1)
#==> 33 {11,22}
# 随机移除某个元素,并且获取这个元素


# 交集
# intersection 交集,求两set的交集
s1 = {11,22,33}
s2 = {22,33,44}
s = s1.intersection(s2)
print(s,s1,s2)
#==> {33, 22} {33, 11, 22} {33, 44, 22}


# 并集
# union 并集
s1 = {11,22,33}
s2 = {22,33,44}
s = s1.union(s2)
print(s,s1,s2)
#==> {33, 22, 11, 44} {33, 11, 22} {33, 44, 22}


# set集合可迭代更新
# update方法
s1 = {11,22,33}
s1.update([44,55,66])
print(s1)
# ==> {33, 66, 11, 44, 22, 55}
# Update方法可传入一个可迭代的对象

函数

定义一个函数

def 函数名(参数):    # def关键字,创建函数
       
    ...
    函数体
    ...
    返回值

定义函数后,去执行函数

def sendmail():
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
  
  
    msg = MIMEText(邮件内容, plain, utf-8)
    msg[From] = formataddr(["武沛齐",[email protected]])
    msg[To] = formataddr(["走人",[email protected]])
    msg[Subject] = "主题"
  
    server = smtplib.SMTP("smtp.126.com", 25)
    server.login("[email protected]", "邮箱密码")
    server.sendmail([email protected], [[email protected],],msg.as_string())
    server.quit()

sendmail()    #执行这个函数

让函数返回值

def f1():
    if 1>2:
        return True
    else:
        return False

ret = f1()
print(ret)   #==> False 
# return 后边加了什么就返回给调用该函数什么值
# return 通用可以返回字符串等
def f1():
    if 1>2:
        return True
    else:
        return False
        print(123)
f1() # ==> 什么都不输出

# 在函数中,一旦执行了return,函数的执行过程立即终止
def f1():
    print(123)

ret = f1()
print(ret) #==> None

#如果函数中没有return,函数默认会返回一个值None

函数的参数

# 形式参数与实际参数

# 这里的name并没有实际意义,它只是用来调用此函数时,把实际参数传入,所以这里的name就叫“形式参数”,简称:形参
def func(name):
    print(name)

# ######### 执行函数 ######### 
#  调用此函数时,我们传入将要在函数中执行并去返回一个结果的这个参数,有实际的意义,这里这个"XXOO"就称为“实际参数”,简称:实参
func(xxoo)
def func(name, age = 18):
    
    print("%s:%s" %(name,age))

# 指定参数
func(sss, 19)
# 使用默认参数
func(www)

# 默认参数当传入值时,将按照默认给的值去函数中执行(当调用时)

注:默认参数需要放在参数列表最后,否则会报错
def func(*args):

    print(args)


# 执行方式一
func(11,33,4,4454,5)  
# *号回收集其余的位置参数


# 执行方式二
li = [11,2,2,3,3,4,54]
func(*li)
# 如果使用*li(列表等可迭代),就相当于做了一个for循环,将这个可迭代的每一个值取出来去调用执行函数
def func(**kwargs):

    print(args)


# 执行方式一
func(name=xx,age=18)
# **收集多个有‘变量’和‘值’对组成的参数

# 执行方式二
li = {name:yy, age:18, gender:male}
func(**li)
# 在调用函数时,可以传入字典方式,传入多个‘变量’和‘值’对
# 函数的参数实例
def f1(a1):
    a1.append(9999)

li = [1,2,3,4]
f1(li)

print(li)   # ==> [1,2,3,4,9999]

#函数在传递实参时,传递的是一个引用而不是一个值,这个引用相当于一个硬链接,所以当传入引用时,在函数中该变这个应用,原值则同样跟着该变

三元运算

if 1==1:
    name = xxx
else:
    name=yyy

# 将以上判断简写成三元运算:
name = xxx if 1==1 else yyy

匿名函数Lambda

def f1(a1):
    return a1 + 100

# 将以上函数写为匿名函数:

f2 = lambda a1: a1+100
# 注意这里f2是被直接赋值了,lambda作为匿名函数也不能像函数代码复用,它是一个临时性函数

python的内置函数

# all() 接受一个可以被迭代的对象,这个对象中一旦有一个值为假返回假
all([1,2,3,False])  #==>False

# any() 同样接收一个可以被迭代的对象,这个对象中有一个为真,则返回真
any([1,2,3,False])  # ==> True

bin()    #接收十进制,转换为2进制
oct()    #接收十进制,转换为8进制
hex()   #接收十进制,转换为16进制


# bytes()函数,将字符串转换为字节
bytes(要转换字符串, 按照什么编码去转换)
s = 中文
n = bytes(s, encoding="utf-8")

# str(), 可以将bytes转为字符串
b = bytes(s, encoding="utf-8")
str(b, encoding="utf-8")  # 使用什么编码转换为字节码,转换为字符串时就使用什么编码转换回

文件操作

打开文件

# open 函数
open(‘t.txt’, ‘x’)  # x文件存在,报错,不存在,创建并写内容  python3新增
r  # 只读
w  # 只写,先清空文件
a  # 追加

# open 函数打开文件制定编码
open(‘db’,’r’, encoding=’gbk’)   # 如果db文件使用的是gbk编码保存,就需要指定以gbk编码打开

# open  rb、wb…模式
open(‘db’,’rb’)  # 不需要指定encoding
# 文件以字节码打开或写入
f= open(db,r+b)
data = f.read()
print(data,type(data))   # 读出文件以bytes读出
f.write(bytes(呵呵呵,encoding=utf-8))  #  同样写入时 ,需要手动转为字节码写入
f.close()


# f.seek()  主动的将指针调到某个位置
f=open(xxx…)
f.seek(1)   # 将指针调到1处
f.write(‘555’)  # 覆盖从1开始的3个字符
# seek以字节方式找位置,所以中文被seek后write,很容易出现乱码
f.seek 使用时a+模式 无论seek到哪个位置,都会将指针挪到最后位置
w+模式 会先清空文件,然后seek就是空文件了挪不了指针

# f.tell()  告诉当前指针所在的位置   

f.seek(20)
f.write("888") # 这里指定位置后,写入会在当前指针处向后覆盖,而不是插入
# 操作文件
read()
# 有b参数,按字节读取
# 无b参数,按字符读取

tell() #获取当前指针(字节)

seek(1) #指针跳转到指定位置(字节)

write() #写数据,b:字节  无b:字符

# f.flush()
强制更新文件,在没有f.close()时,所有write操作都会在缓冲区没有写入文件,使用flush强制写入

 

以上是关于python学习笔记-Day3的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记Day3

day3-python学习笔记

python学习笔记 Day3

python学习笔记day3(数据类型)

第二周 day3 python学习笔记

python学习笔记-Day3