zoukankan      html  css  js  c++  java
  • python 基础

    Python基础

    三元运算(三目运算),是对简单的条件语句的缩写。

    # 书写格式
     
    result = 值1 if 条件 else 值2
     
    # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量
    

      

    set

    set集合,是一个无序且不重复的元素集合

    add-----添加元素
    # st = {"ale","liu","nuh","koi"}
    # st.add("sdf")
    # print(st)
    clear-----清除列表
    # st = {"ale","liu","nuh","koi"}
    # st.clear()
    # print(st)
    difference----查找st中有的,ss没有的
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # print(st.difference(ss))
    #
    # {'koi', 'liu'}
    difference-update----找到A中有的B中没有的,并更新自己
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # st.difference_update(ss)
    # print(st)
    #
    # {'liu', 'koi'}
    discard---移除指定元素,不存在不会报错
    # st = {"ale","liu","nuh","koi"}
    # st.discard("liu")
    # print(st)
    
    # {'nuh', 'ale', 'koi'}
    
    intersection--------交集,找出两个都有的
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # ret = st.intersection(ss)
    # print(ret)
    
    intersection-update----交集,找出两个相同的并更新st
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # st.intersection_update(ss)
    # print(st)
    
    {'nuh', 'ale'}
    
    isdisjoint   如果没有交集返回True,如果有交集返回Fales
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # print(st.isdisjoint(ss))
    #
    # False
    issubset-------是否是子序列
    # st = {"ale","liu","nuh","koi"}
    # ss = {"ale","nuh",}
    # print(ss.issubset(st))
    # True
    
    issuperset----是否是夫序列
    # st = {"ale","liu","nuh","koi"}
    # ss = {"ale","nuh",}
    # print(st.issuperset(ss))
    # True
    pop-------删除随机元素
    # st = {"ale","liu","nuh","koi"}
    # st.pop()
    # print(st)
    remove-----删除指定元素
    # st = {"ale","liu","nuh","koi"}
    # st.remove("ale")
    # print(st)
    #
    # {'koi', 'liu', 'nuh'}
    symmetric_difference----对称交集,打印两个集合中不同的元素
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # print(st.symmetric_difference(ss))
    # {'liu', 'koi', 'ds', 'alex'}
    symmetric_difference_update----对称交集,并更新st
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # st.symmetric_difference_update(ss)
    # print(st)
    # {'koi', 'alex', 'ds', 'liu'}
    
    union------并集,把两个变量合起来
    # st = {"ale","liu","nuh","koi"}
    # ss = {"alex","ale","nuh","ds"}
    # print(st.union(ss))
    # {'ale', 'koi', 'alex', 'nuh', 'liu', 'ds'}
    update------更新
    # st = {"ale","liu","nuh","koi"}
    # sk = {"ala"}
    # st.update(sk)
    # print(st)
    # {'koi', 'ale', 'liu', 'ala', 'nuh'}
    

      

    一、数字和字符串

    对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

    import copy
    # ######### 数字、字符串 #########
    n1 = 123
    # n1 = "i am alex age 10"
    print(id(n1))
    # ## 赋值 ##
    n2 = n1
    print(id(n2))
    # ## 浅拷贝 ##
    n2 = copy.copy(n1)
    print(id(n2))
      
    # ## 深拷贝 ##
    n3 = copy.deepcopy(n1)
    print(id(n3))
    View Code

     

    二、其他基本数据类型

    对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

    1、赋值

    赋值,只是创建一个变量,该变量指向原来内存地址,如

    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
      
    n2 = n1

    2、浅拷贝

    浅拷贝,在内存中只额外创建第一层数据

    import copy
      
    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
      
    n3 = copy.copy(n1)

    3、深拷贝

    深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

    import copy
      
    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
      
    n4 = copy.deepcopy(n1)

    在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下:

    while True:
        if cpu利用率 > 90%:
            #发送邮件提醒
            连接邮箱服务器
            发送邮件
            关闭连接
        
        if 硬盘使用空间 > 90%:
            #发送邮件提醒
            连接邮箱服务器
            发送邮件
            关闭连接
        
        if 内存占用 > 80%:
            #发送邮件提醒
            连接邮箱服务器
            发送邮件
            关闭连接
    View Code

    腚眼一看上述代码,if条件语句下的内容可以被提取出来公用,如下:

    def 发送邮件(内容)
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
        
    while True:
        
        if cpu利用率 > 90%:
            发送邮件('CPU报警')
        
        if 硬盘使用空间 > 90%:
            发送邮件('硬盘报警')
        
        if 内存占用 > 80%:
    View Code

    对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别:

    • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
    • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

    函数式编程最重要的是增强代码的重用性和可读性

    二、定义和使用

    def 函数名(参数):
           
        ...
        函数体
        ...
        返回值

    函数的定义主要有如下要点:

    • def:表示函数的关键字
    • 函数名:函数的名称,日后根据函数名调用函数
    • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
    • 参数:为函数体提供数据
    • 返回值:当函数执行完毕后,可以给调用者返回数据。

    1、返回值

    函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

    以上要点中,比较重要有参数和返回值

    def 发送短信():
           
        发送短信的代码...
       
        if 发送成功:
            return True
        else:
            return False
       
       
    while True:
           
        # 每次执行发送短信函数,都会将返回值自动赋值给result
        # 之后,可以根据result来写日志,或重发等操作
       
        result = 发送短信()
        if result == False:
            记录日志,短信发送失败...
    View Code

    2、参数

    为什么要有参数?

    函数的有三中不同的参数:

    • 普通参数
    • 默认参数
    • 动态参数
  • 相关阅读:
    推销
    5132. 颜色交替的最短路径
    5130. 等价多米诺骨牌对的数量
    @babel/plugin-transform-runtime和@babel/preset-env的区别
    5128. 最深叶节点的最近公共祖先(二叉树)
    1094. 拼车
    1109. 航班预订统计(数组)
    5129. 表现良好的最长时间段(数组)
    path.resove 和 path.join
    【原生】 call、apply、bind 的基本使用方法,已经解析了某些源码
  • 原文地址:https://www.cnblogs.com/pythonxiaokang/p/5471833.html
Copyright © 2011-2022 走看看