zoukankan      html  css  js  c++  java
  • Python语法命令学习-Day3(零基础)

    一、set #集合

    set的定义:集合是无序的,不重复的序列。

    1.创建集合

    例1:

    set()   #创建空集合

    例2:

    li = [11,22,11,22,3]  #创建列表li      当执行这条命令时候,python内部自动会去执行list()来进行创建列表

    s1 = set(li)  #将列表li转换成集合s1

    print(s1)

    2.操作集合

    例:

    s1 = {11,22,33}
    s2 = {22,33,44}
    a = ['lich','dddd',999]

      1.s1中存在,但是s2中不存在的元组

        s1.difference(s2)

      2.s1 和s2 中不一致的组成一个set

        s1.symmetric_difference(s2)

      3.提取s1中存在,s2中不存在的元素,并更新并覆盖s1集合中

        s1.difference_update(s2)

      4.提取s1 和s2 中不一致的组成一个set 更新并覆盖s1集合中

        s1.symmetric_difference_update(s2)

      5.移除s1集合中的元素‘22’(当集合中没有该元素时,使用remove 不会有语法报错)

        s1.remove(22)

      6.移除s1集合中的元素‘22’(当集合中没有该元素时,使用discard 不会有语法报错)

        s1.discard(22)

      7.随机移除一个元素

        s1.pop()

      8.取s1 和 s2交集

        s1.intersection(s2)

      9.取s1 和 s2交集,并覆盖更新到s1

        s1.intersection_update(s2)

      10.联合/并集,将s1 和s2 合并

        s1.union(s2)

      11.s1集合中,增加一个元素‘ddd'

        s1.add('ddd')

      12.将列表a 全部加入s1集合

        s1.update(a)

    二、函数    

    1.自定义函数

      发邮件函数

      如下:

    def send_mail():
    try:
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr

    msg = MIMEText('邮件正文内容', 'plain', 'utf-8')
    msg['From'] = formataddr(['显示的发件人姓名', '发件人邮箱地址'])
    msg['To'] = formataddr(['显示的收件人姓名', '收件人邮箱地址'])
    msg['Subject'] = '邮件主题'

    server = smtplib.SMTP('发件箱公网IP/域名', 25)
    server.login('发件人邮箱地址','发件人邮箱密码') #发件人邮箱和密码
    server.sendmail('发件人邮箱地址', ['收件人邮箱地址', ], msg.as_string()) #前者邮箱为发件者邮箱,后者为收件人邮箱
    server.quit()
    except:
    #发送失败时候执行
    return False
    else:
    #发送成功时候执行
    return True

    ret = send_mail()
    if ret == True:
    print('发送成功')
    else:
    print('发送失败')


    定义一个函数:
      1.def 是关键字,用于创建函数
      2.def 函数名():  #这是标准函数格  
      3.函数体  #函数体中可以实现该函数的具体功能
      4.返回值  #该函数执行后的结果

    ****定义函数后,函数不会被执行,一旦被调用后 才会被执行****
    ****在函数中,一旦 执行了return后,函数不在往下执行,函数终止****

    2.函数中的参数
      1.普通参数  #(如果给某个参数设置默认参数的话,这个形式参数必须要放到参数列表的最后)
      2.默认参数
      3.指定参数
      4.动态参数
      5.万能参数  #(*在前面,**在后面)

    * (可以接受任意个 实际参数) 默认将传入的参数,全部放入元祖中。 当传值时,f1(*[1,2,3,4,5])
    ** (直接赋值) 默认将传入的参数,全部放入字典中。

    例1:

    li = 'lich'
    f1(*li) #内部做了个for循环,把每一个字母作为一个元素
    f1(li) #直接把li的值当作一个元素

    例2:

    def f1(**args):
    print(args,type(args))

    f1(n1='lich',n2=20) #**进入字典模式,把n1 和n2的值进行赋值,n1是key ,lich是value

    例3: 万能参数

    def f1(*args,**kwargs):
    print(args)
    print(kwargs)

    f1(11,111,333,4,n1='kkk',n2='ddd')

    3.函数补充内容(一)

      a.函数的创建,以下面创建的为准,从上至下

      b.函数中传递的是引用

      c.全局变量(均可读,赋值时先global+变量名,全局变量必须大写,对于列表、字典等特殊情况,只能进行修改值,不能进行赋值)

    例1:
    def f1(a1):
      a1.append(999)
    li = [1,2,3,4]
      f1(li)
      print(li)

    #####函数中传递的值 是引用,所以a1=li=[1,2,3,4,999]


    例2:
    name = 'lich'
    name2 = [1,2,3,4]
    def f1():
      global name #修改全局变量重新赋值的开关
      name = 'alex' #修改了全局变量name

    def f2():
      print(name2)
      name2.append(999) #对于特殊的,‘列表’、‘字典’、‘元祖’ 可以直接修改,但是不可重新赋值

    ***自己本身函数体中的变量,只能在本函数体中进行调用,所以f2中的name 压根没有定义,所以无法调用;如果定义了全局变量后,在每个函数体中分别调用***

    ***如果在自己函数体中定义了name后,在本函数体中调用name时,优先调用自己本函数体中的变量,如果本函数体没有name变量,则去全局变量中找name变量***

    ***定义全局变量的时候,一定都要大写***

    4.内置函数

      #abs() 取绝对值
      #all() 如果()中的所有元素都为真,则all()输出为真,只要有一个为False,则all()输出为False
      #0 = False , None = False ,空的[]/()/{} = False
      #any() 任意有真元素,则any()为真
      #acsii() 自动会去执行对象的__repr__方法
      #bin() 接收一个十进制,输出一个二进制
      #oct() 接收一个十进制,输出一个八进制
      #hex() 接收一个十进制,输出一个十六进制
      #bool() 布尔值

      #bytes() 标准格式:bytes(需要转换的字符串,'按照什么编码')   字符串转换成字节类型只能通过bytes来转

    *****

    对于utf-8 编码 一个汉字占3个字节
    对于GBK编码 一个汉字占2个字节

    *****

    例如:

    s = '李杰'
    bytes(s,encoding='utf-8') #使用utf-8 转换成字节类型
    bytes(s,encoding='gbk') #使用utf-8 转换成字节类型

    #str() 字节转换成字符串 (在转换成字符串时候,也需要用相同的编码进行转换)
    例如:str(bytes('李杰',encoding='utf-8'),encoding='utf-8')

    5.文件操作

      1.打开文件-操作文件-关闭文件

    • f=open('db','r') 只读
    • f=open('db','w') 只写,先清空源文件
    • f=open('db','x') 如果文件存在,会发生报错;如果不存在,就新建这个文件并只写
    • f=open('db','a') 追加
    • f=open('db','xb') 告诉python 不要对文件进行编码转换处理,直接输出二进制给我
    • f=open('db','wb') 告诉python 不要对文件进行编码转换处理,直接输出二进制给我
    • f=open('db','rb') 告诉python 不要对文件进行编码转换处理,直接输出二进制给我
    • r+ 可读 可写 (最常用,可以以seek()进行定位,随便在哪写)
    • a+ 可读 可写 (每次写的时候,不能定位,只能末尾追加)
    • w+ 可读 可写 (将原来内容清空,再进行写入)
    • x+ 可读 可写
    • r+b 读写都是字节
    • ###只要有b 都是字节,没有b 则按字符进行读写

      2.操作文件

    • read() #无参数,读全部;如有参数,/1.有b 按字节; /2.无b,按字符
    • teel() #获取当前指针位置
    • seek(1) #跳转到指针指定位置 (按字节来读写)
    • write() #写数据,和打开方式也有关系 有b,写字节;无b,写字符。
    • close() #关闭
    • fileno() #文件描述符
    • flush() #强制刷新到硬盘,见pycharm
    • readline() #读取第一行
    • 在上面命令之后,再输入readline() #则读取第二行了 ,因为指针在移动,所以才读取第二行
    • truncate #用来截断,根据seek()的指针位置,将后面所有内容清除

    for循环文件对象 f = open(xxx)
    for line in f
      print(line)

      3.关闭文件

    • 1.f.close()

      例:with open('xb') as f:

          pass

    • 通过with同时打开n个文件

      例:with open('db1') as f1, open('db2') as f2

          pass

    • 3.替换文件中部分内容

     6.三元运算

    if 1 == 1:
      name = 'alex'
    else:
      name = 'sb'

    上下两个一样一样的

    name = 'alex' if 1 == 1 else 'sb' #三元运算


    7.lambdab表达式

    例:
    def f1(a1):
      return a1 + 100
    ret = f1(10)
    print(ret)
    上述简单函数 可以用lambda表达式书写
      f2 = lambda a1:a1 +100

  • 相关阅读:
    函数进阶-生成器
    函数进阶-列表生成式
    闭包
    命名空间
    内置方法
    函数
    squid清除缓存
    subprocess实现管道
    Python统计脚本行数(fileinput)
    fabric note
  • 原文地址:https://www.cnblogs.com/lich1x/p/9212748.html
Copyright © 2011-2022 走看看