Python之路_Day3

Python—Day3—课堂笔记
----------------------------------------------------------------------------------------------------
 前期回顾:
    Python简介
    Python入门
    内容编码
    注释
    脚本参数传入
    .pyc文件
    变量的声明
    用户输入(input)
    流程控制(if...else...,缩进,循环,break,continue)
    运算(+,-,*,/)
    基本数据类型(数字,字符串,布尔值)
    面向对象
    str,list,tuple,dict
----------------------------------------------------------------------------------------------------
本期大纲:
一、set集合
         —创建集合
         —集合功能及操作
         —练习
二、函数
— 自定义函数
         — 自定义函数小练习
— 内置函数
----------------------------------------------------------------------------------------------------
一、set集合
set集合是一个无序且不重复的序列
1、创建集合
li = ["12","34","56",]     #列表
dic = {"k":"v"}                #字典
se = {"123","456"}     #集合
 
   
  1. s1 = {11,22}
  2. s2 = set()
  3. s3 = set([11,22,33,4])
 
   
  1. >>> s = set()
  2. >>> li = [11,22,11,22]
  3. >>> s = set(li)
  4. >>> print(s)
  5. {11, 22}
2、集合功能及操作
add    #添加元素
     add(self*args, **kwargs)
 
    
  1. >>> s = set()
  2. >>> print(s)
  3. set()
  4. >>> s.add(123)
  5. >>> print(s)
  6. {123}
clear     # 清楚所有内容
    clear(self, *args, **kwargs)
 
    
  1. >>> s = {123}
  2. >>> print(s)
  3. {123}
  4. >>> s.clear()
  5. >>> print(s)
  6. set()
copy     # 浅拷贝
     copy(self*args, **kwargs)

difference    A中存在B中不存在
    difference( self * args,  * * kwargs)
 
     
  1. >>> s1 = {11,22,33}
  2. >>> s2 = {22,33,44}
  3. >>> s3 = s1.difference(s2)
  4. >>> print(s3)
  5. {11}
  6. >>> s3 = s2.difference(s1)
  7. >>> print(s3)
  8. {44}
difference_update      # 从当前集合中删除和B中相同的元素
    difference_update( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s1.difference_update(s2)>>> print(s1){11}
symmetric_difference      # 对称差集
    symmetric_difference( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s3 = s1.symmetric_difference(s2)>>> print(s3){33, 11, 44, 22}>>> s4 = s2.symmetric_difference(s1)>>> print(s4){33, 11, 44, 22}
symmetric_difference_update      # 对称差集,并更新到a中
    symmetric_difference_update( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s1.symmetric_difference_update(s2)>>> print(s1){33, 11, 44, 22}
discard     # 移除某个元素,不存在不报错
    discard( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s1.discard(11)>>> print(s1){33, 22}
remove     # 移除某个元素,不存在会报错
    remove( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s1.remove(11111)Traceback (most recent call last): File "<input>", line 1, in <module>KeyError: 11111>>> s1.remove(11)>>> print(s1){33, 22}
pop     # 随机移除某个元素
    pop( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> ret = s1.pop()>>> print(ret)33>>> print(s1){11, 22}#ret为删除的值
intersection     # 取交集,共同都有的
    intersection( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s3 = s1.intersection(s2)>>> print(s3){33, 22}
intersection_update      # 取交集并更更新到A中
    intersection_update( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s1.intersection_update(s2)>>> print(s1){33, 22}
isdisjoint      # 如果没有交集,返回True,否则返回False
    isdisjoint( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s1.isdisjoint(s2)False#有交集返回False>>> s1 = {11,22,33}>>> s2 = {44,55,66}>>> s1.isdisjoint(s2)True#没有交集返回True
issubset      # 是否是子序列
    issubset( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {44,55,66}>>> s1.issubset(s2)False
issuperset      # 是否是父序列
    issuperset(self*args, **kwargs)
>>> s1 = {11,22,33}>>> s2 = {44,55,66}>>> s1.issuperset(s2)False
union      # 并集
    union( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> s2 = {22,33,44}>>> s3 = s1.union(s2)>>> print(s3){33, 22, 11, 44}
update     # 可以迭代
    update( self * args,  * * kwargs)
>>> s1 = {11,22,33}>>> li = [11,22,3,11,2]>>> s1.update(li)>>> print(s1){3, 33, 2, 11, 22}>>> li = (11,22,3,11,2)>>> s1.update(li)>>> print(s1){3, 33, 2, 11, 22}>>> li = "sandler">>> s1.update(li)>>> print(s1){'a', 33, 2, 3, 'd', 'l', 'e', 11, 's', 22, 'r', 'n'}
3、练习
 
   
  1. #!/usr/bin/env python
  2. # -.- coding: utf-8 -.-
  3. # by sandler
  4. old_dice = {
  5. "#1":8,
  6. "#2":4,
  7. "#4":2,
  8. }
  9. new_dice = {
  10. "#1":4,
  11. "#2":4,
  12. "#3":2,
  13. }
  14. #应该删除那几个槽位
  15. #应该更新那几个槽位
  16. #应该增加那几个槽位
  17. new_set = set(new_dice.keys())
  18. old_set = set(old_dice.keys())
  19. remove_set = old_set.difference(new_set)
  20. add_set = new_set.difference(old_set)
  21. update_set = old_set.intersection(new_set)
----------------------------------------------------------------------------------------------------
二、函数
1、自定义函数
1)使用:
    (1)、def关键字,创建函数
    ( 2)、函数名
    (3)、():
    (4)、函数体
    (5)、返回值
    def 函数名():
          函数体
          返回值
    函数示例,邮件发送:
 
    
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # By Sandler
  4. def sendmail():
  5. try:
  6. import smtplib
  7. from email.mime.text import MIMEText
  8. from email.utils import formataddr
  9. msg = MIMEText('邮件内容', 'plain', 'utf-8')
  10. msg['From'] = formataddr(["武沛齐",'wptawy@126.com'])
  11. msg['To'] = formataddr(["走人",'424662508@qq.com'])
  12. msg['Subject'] = "主题"
  13. server = smtplib.SMTP("smtp.126.com", 25)
  14. server.login("wptawy@126.com", "邮箱密码")
  15. server.sendmail('wptawy@126.com', ['3628905@qq.com',], msg.as_string())
  16. server.quit()
  17. except:
  18. # 发送失败
  19. return "失败"
  20. else:
  21. # 发送成功
  22. return "cc"
  23. ret = sendmail()
  24. print(ret)
  25. if ret == "cc":
  26. print('发送成功')
  27. else:
  28. print("发送失败")
2)参数:
    普通参数(严格按照顺序,将实际参数赋值给形式参数)
 
    
  1. >>> def f1(name):
  2. ... print(name)
  3. ...
  4. >>> f1('sandler')
  5. sandler
  6. >>> def f1(name,age):
  7. ... print(name)
  8. ... print(age)
  9. ...
  10. >>> f1('sandler',18)
  11. sandler
  12. 18
    默认参数(必须放置在参数列表最后)
 
    
  1. >>> def f1(name,age,job='IT'):
  2. ... print(name)
  3. ... print(age)
  4. ... print(job)
  5. ...
  6. >>> f1("sandler",18)
  7. sandler
  8. 18
  9. IT
  10. >>> f1("sandler",18,"HR")
  11. sandler
  12. 18
  13. HR
    指定参数(将实际参数赋值给定值的形式参数)
 
    
  1. >>> def f1(name,age,job='IT'):
  2. ... print(name)
  3. ... print(age)
  4. ... print(job)
  5. ...
  6. >>> f1(age=18,name="sandler",job="HR")
  7. sandler
  8. 18
  9. HR
    动态参数
          '*args'(可以传入多个参数,转换成元祖,如果传入一个列表,则会把整个列表转化成一个元祖的元素,但如果列表前加上*,则会把列表的每一个元素转化成元祖的元素)
 
    
  1. >>> def f1(*args):
  2. ... print(args,type(args))
  3. ...
  4. >>> f1(11)
  5. (11,) <class 'tuple'>
  6. >>> li = [11,22,33,44]
  7. >>> f1(li)
  8. ([11, 22, 33, 44],) <class 'tuple'>
  9. >>> f1(*li)
  10. (11, 22, 33, 44) <class 'tuple'>
  11. >>> li = "sandler"
  12. >>> f1(*li)
  13. ('s', 'a', 'n', 'd', 'l', 'e', 'r') <class 'tuple'>
          '**args'(动态指定参数,指定某个key和value,例:n1="sandler",传入后转化为字典,)
 
    
  1. >>> def f1(**args):
  2. ... print(args,type(args))
  3. ...
  4. >>> f1(k1="v1")
  5. {'k1': 'v1'} <class 'dict'>
  6. >>> dic = { "k1":"v1","k2":"v2"}
  7. >>> f1(kk=dic)
  8. {'kk': {'k2': 'v2', 'k1': 'v1'}} <class 'dict'>
  9. >>> f1(**dic)
  10. {'k2': 'v2', 'k1': 'v1'} <class 'dict'>
    万能参数(*args,**kwargs)
 
    
  1. >>> def f1(*args,**kwargs):
  2. ... print(args,type(args))
  3. ... print(kwargs,type(kwargs))
  4. ...
  5. >>> f1(11,22,33,44,k1="v1",k2="v2")
  6. (11, 22, 33, 44) <class 'tuple'>
  7. {'k1': 'v1', 'k2': 'v2'} <class 'dict'>
3)补充:
    字符串格式化: .format(*args,**kwargs)
 
     
  1. >>> s1 = "i am {0}, age {1}.".format("sandler", 18)
  2. >>> print(s1)
  3. i am sandler, age 18.
  4. >>> s2 = "i am {0}, age {1}".format(*["sandler", 18])
  5. >>> print(s2)
  6. i am sandler, age 18
  7. >>> s1 = "i am {name}, age {age}".format(name='sandler', age=18)
  8. >>> print(s1)
  9. i am sandler, age 18
  10. >>> dic = {'name': 'sandler', "age": 18}
  11. >>> s2 = "i am {name}, age {age}".format(**dic)
  12. >>> print(s2)
  13. i am sandler, age 18
    全局变量:所有的作用域都可读,优先使用自己作用域的变量,
          全局变量的变量名需要全部大写(潜规则)
          对全局变量进行重新赋值,需要global
          global 变量名 在任意作用域定义全局变量
          特殊:列表字典,可修改,不可重新赋值
 
    
  1. #!/usr/bin/env python
  2. # -.- coding: utf-8 -.-
  3. # By sandler
  4. '''
  5. def f1():
  6. name = "alex"
  7. print(name)
  8. def f2():
  9. print(name)
  10. name变量定义在f1函数中,所以只有f1函数可以读取,f2函数无法读取name变量
  11. '''
  12. NAME = "sandler"
  13. def f1():
  14. age = 18
  15. print(NAME,age)
  16. def f2():
  17. age = 19
  18. print(NAME,age)
  19. f1()
  20. f2()
  21. def f3():
  22. age = 18
  23. global NAME # 表示,name是全局变量
  24. NAME = "yuli"
  25. print(age, NAME)
  26. def f4():
  27. age = 19
  28. print(age, NAME)
  29. f3()
  30. f4()
4)三元运算:对于简单的 if else 语句,可以使用三元运算来表示,即:
 
    
  1. if 1 == 1:
  2. name = "sandler"
  3. else:
  4. name = "yuli"
  5. name = "sandler" if 1 == 1 else "yuli"
5)lambda表达式:简单的函数,只能用一行
 
    
  1. def func(arg):
  2. return arg + 1
  3. result = func(123)
  4. my_lambda = lambda arg : arg + 1
  5. result = my_lambda(123)
2、自定义函数小练习
编写一个用户登录程序,程序包含用户登录和用户注册,利用函数编写:
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. def login(username, password):
  5. """
  6. 用于用户登录
  7. :param username: 用户输入的用户名
  8. :param password: 用户输入的密码
  9. :return: true,表示登录成功;false,登录失败
  10. """
  11. f = open("db", 'r')
  12. for line in f:
  13. line_list = line.strip().split("|")
  14. if line_list[0] == username and line_list[1] == password:
  15. return True
  16. return False
  17. def register(username, password):
  18. """
  19. 用于用户注册
  20. :param username: 用户输入的用户名
  21. :param password: 用户输入的密码
  22. :return: 默认None
  23. """
  24. f = open("db", 'a')
  25. temp = "\n" + username + "|" + password
  26. f.write(temp)
  27. f.close()
  28. def main():
  29. t = input("1、登录;2、注册 : ")
  30. if t == "1":
  31. user = input("请输入用户名: ")
  32. pwd = input("请输入密码: ")
  33. r = login(user, pwd)
  34. if r:
  35. print("登录成功")
  36. else:
  37. print("登录失败")
  38. elif t == "2":
  39. user = input("请输入用户名: ")
  40. pwd = input("请输入密码: ")
  41. register(user, pwd)
  42. main()
3、内置函数
902492-20160524185420116-493216887.png
注:查看详细 猛击这里
abs()      绝对值
 
    
  1. >>> num = abs(3)
  2. >>> print(num)
  3. 3
all()      所有为真,才为真
 
    
  1. >>> num = all([1,2,3,None])
  2. >>> print(num)
  3. False
  4. >>> num = all([1,2,3])
  5. >>> print(num)
  6. True
any()      只要有真,就为真
 
    
  1. >>> num = any([[],0,"",None])
  2. >>> print(num)
  3. False
  4. >>> num = any([[],1,"",None])
  5. >>> print(num)
  6. True
ascii()      忘掉他吧
 
     
  1. # 按大王的至理名言来说”忘掉他吧“
  2. >>> class Foo:
  3. ... def __repr__(self):
  4. ... return "444"
  5. ...
  6. >>> num = ascii(Foo())
  7. >>> print(num)
  8. 444
bin()      十进制转二进制
 
    
  1. >>> print(bin(8))
  2. 0b1000
oct()      十进制转八进制
 
     
  1. >>> print(oct(12))
  2. 0o14
hex()      十进制转十六进制
 
    
  1. >>> print(hex(14))
  2. 0xe
bool()      布尔值,真或假
 
    
  1. >>> print(bool(1))
  2. True
  3. >>> print(bool(0))
  4. False
  5. >>> print(bool(None))
  6. False
  7. >>> print(bool(()))
  8. False
  9. >>> print(bool([]))
  10. False
  11. >>> print(bool({}))
  12. False
bytes()      把字符串转换成字节类型,需要定义编码格式 例“n = bytes("李杰",encoding="utf-8")”
 
    
  1. # utf-8 一个汉字:三个字节
  2. # gbk 一个汉字:二个字节
  3. # 字符串转换字节类型
  4. # bytes(只要转换的字符串, 按照什么编码)
  5. >>> name = "李杰"
  6. >>> print(name)
  7. 李杰
  8. >>> bytes_name = bytes(name,encoding="utf-8")
  9. >>> print(bytes_name)
  10. b'\xe6\x9d\x8e\xe6\x9d\xb0'
  11. >>> bytes_name = bytes(name,encoding="gbk")
  12. >>> print(bytes_name)
  13. b'\xc0\xee\xbd\xdc'
str()      把字节转换成字符串str(bytes("李杰",encoding="utf-8"),encoding="utf-8")
 
    
  1. >>> name = "李杰"
  2. >>> print(name)
  3. 李杰
  4. >>> bytes_name = bytes(name,encoding="gbk")
  5. >>> print(bytes_name)
  6. b'\xc0\xee\xbd\xdc'
  7. >>> str_name = str(bytes_name,encoding="gbk")
  8. >>> print(str_name)
  9. 李杰
open()      文件处理操作
    操作文件是一般分为:打开文件、操作文件、关闭文件
    (1)打开文件:
 
   
  1. 文件句柄 = open('文件路径', '模式')
    打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
    打开文件的模式有:
          r ,只读模式【默认】
          w,只写模式【不可读;不存在则创建;存在则清空内容;】
          x, 只写模式【不可读;不存在则创建,存在则报错】
          a, 追加模式【可读;   不存在则创建;存在则只追加内容;】

          "+" 表示可以同时读写某个文件
          r+, 读写【可读,可写】
          w+,写读【可读,可写】
          x+ ,写读【可读,可写】
          a+, 写读【可读,可写】

          "b"表示以字节的方式操作
          rb  或 r+b
          wb 或 w+b
          xb 或 w+b
          ab 或 a+b
          注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
 
   
  1. f = open('db', 'r') # 只读
  2. f = open('db', 'w') # 只写,先清空原文件
  3. f = open('db', 'x') # 文件存在,报错;不存在,创建并只写
  4. f = open('db', 'a') # 追加
  5. f = open('db','r', encoding="utf-8")
     (2)操作文件:
          close(self, *args, **kwargs)     #关闭文件
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db","r")    #打开文件
  5. f.read()    #读取文件
  6. f.close()    #关闭文件
          fileno(self, *args, **kwargs)     #文件描述符
 
   
  1. #! /usr/bin/env python
  2. # -.- coding: utf-8 -.-
  3. # By Sandler
  4. f = open("db", 'r+')
  5. f.fileno()
          flush(self, *args, **kwargs)     #刷新文件内部缓冲区
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db", 'a')
  5. f.write("123")
  6. f.flush() #强制刷新写入上面的内容
  7. input("请输入: ") #等待用户输入
          isatty(self, *args, **kwargs)     # 判断文件是否是同意tty设备
          read(self, *args, **kwargs)     # 读取指定字节数据
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db","r")
  5. data = f.read()
  6. print(data)
  7. f.close()
          readable(self, *args, **kwargs)     # 是否可读
          readline(self, *args, **kwargs)     # 仅读取一行数据
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db","r")
  5. for line in f:
  6. print(line)    #按行打印文件内容
  7. f.close()
          seek(self, *args, **kwargs)     # 指定文件中指针位置
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db","r")
  5. f.seek(3) #指定指针位置为第三个字节
          seekable(self, *args, **kwargs)     # 指针是否可操作
          tell(self, *args, **kwargs)     # 获取指针位置
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db","r")
  5. print(f.tell()) #打印当前指针位置(字节)
          truncate(self, *args, **kwargs)     # 截断数据,仅保留指定之前数据
 
   
  1. #!/usr/bin/env python
  2. # -.- coding:utf-8 -.-
  3. # By Sandler
  4. f = open("db", 'r+')
  5. f.seek(3) #指定指针位置
  6. f.truncate() #截断,指针位置后的数据清空
  7. f.close()
          writable(self, *args, **kwargs)     # 是否可写
          write(self, *args, **kwargs)     # 写内容
 
    
  1. #! /usr/bin/env python
  2. # -.- coding: utf-8 -.-
  3. # By Sandler
  4. f = open("db", 'w') #打开文件
  5. f.write("yuli") #先清空文件内容,再写入文件
  6. f.close() #关闭文件
  7. f = open("db", 'a') #打开文件
  8. f.write("alice") #追加写入文件到最后一行
  9. f.close() #关闭文件
----------------------------------------------------------------------------------------------------





转载于:https://www.cnblogs.com/sandler613/p/5521456.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值