• python——杂货铺


    三目运算:

    >>> 1 if 5>3 else 0
    1
    >>> 1 if 5<3 else 0
    0

    深浅拷贝:

    一、数字和字符串

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

    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))
    22219144
    # ## 深拷贝 ##
    n3 = copy.deepcopy(n1)
    print(id(n3))
    22219144

    二、其他基本数据类型

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

    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)

    函数扩展:发送邮件实例

    def emil(p):
        import smtplib
        from email.mime.text import MIMEText
        from email.utils import formataddr
      
      
        msg = MIMEText('邮件内容', 'plain', 'utf-8')
      # From 后面的邮箱地址一定要跟发送邮箱地址相同,不然会认证失败 msg[
    'From'] = formataddr(["武沛齐",'wptawy@126.com']) msg['To'] = formataddr(["走人",'424662508@qq.com']) msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25) server.login("wptawy@126.com", "邮箱密码") server.sendmail('wptawy@126.com', [p,], msg.as_string()) server.quit email("244591052@qq.com")

    加密(hashlib)

    import hashlib
    # 设置自己的加密字符串,防止他人撞库破解
    hash = hashlib.md5(bytes('sfa',encoding='utf-8'))
    # 设置加密的密码
    hash.update(bytes('123',encoding="utf-8"))
    print(hash.hexdigest())
    # b72a6beb24eef36c247274014dd4ade3
    import hashlib
    
    def md5(arg):
        hash = hashlib.md5(bytes('licheng', encoding='utf-8'))
        # 设置加密的密码
        hash.update(bytes(arg, encoding="utf-8"))
    
        return hash.hexdigest()
    
    def register(user,pwd):
        with open("db",'a',encoding="utf-8") as f:
            temp = user + "|" + md5(pwd)+ "
    "
            f.write(temp)
    
    def login(user,pwd):
        with open("db","r",encoding="utf-8") as f:
            for line in f:
                u, p = line.strip().split("|")
                if u == user and p == md5(pwd):
                    return True
    
    
    choose = input("1.登录
     2.注册")
    if choose == "2":
        user = input("用户名:")
        pwd = input("密码:")
        register(user,pwd)
    elif choose == "1":
        user = input("用户名:")
        pwd = input("密码:")
        judge = login(user,pwd)
        if judge:
            print("登陆成功")
        else:
            print("登录失败")
    实例:登录密码加密保存

    enumrate

    >>> for i,j in enumerate([1,2,3]):
     print i,j
     
    0 1
    1 2
    2 3
    >>> for i,j in enumerate({'a':1,'b':2}):
     print i,j
     #字典默认遍历key
    0 a
    1 b
    li = ['冰箱','彩电','洗衣机']
    # 可以指定序号从什么开始计数
    for index,i in enumerate(li,1):
        print(index,i)
    # 1 冰箱
    # 2 彩电
    # 3 洗衣机
    # 虽然显示是从1开始,但系统内还是以0开始计数的

    range,xrange

    >>> range(1,5) #代表从1到5(不包含5)
    [1, 2, 3, 4]
    >>> range(1,5,2) #代表从1到5,间隔2(不包含5)
    [1, 3]
    >>> range(5) #代表从0到5(不包含5)
    [0, 1, 2, 3, 4]

    python2中:

    range——获取指定范围内的数,且立刻在内存中生成

    xrange——获取指定范围内的数,但只有在for循环调用的时候才在内存中生成,节省内存

    python3中:

    舍弃了xrange,python3中的range相当于Python2中的xrange。

    内置函数:

    print(__name__)  #本文件被执行时输出__main__,否则输出模块名
    
    print(__doc__)  #输出 py 文件的注释
    
    print(__file__)   # 输出自己文件的路径
    #可以配合常用os操作完成系统路径的修改:
    p1 = os.path.dirname(__file__)
    p2 = "lib"
    my_dir = os.path.join(p1, p2)
    sys.path.append(my_dir)
    
    print(__package__)  # 输出当前.py所在文件夹,用.划分

    小知识点

    • 对于字符串,执行一个功能,生成一个新内容,原来的内容不变。
    • 对于list、tuple、dict,执行一个功能,自身进行变化。
  • 相关阅读:
    蓝翔杯子校内赛练习代码
    [蓝桥杯][算法训练VIP]猴子分苹果
    系统设计部分代码
    坐标离散化
    蒟蒻吃药计划-治疗系列 #round 1 机器分配+挖地雷
    蒟蒻吃药计划
    F小蒟蒻教你卡常
    最长不下降子序列
    最大子段和(DP)
    luogu P1216 (USACO1.5) Number Triangles
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6431270.html
Copyright © 2020-2023  润新知