python实战打卡---day3

  1. 打印

    lst=[1,3,5]
    print(lst) # [1,3,5]
    print('lst:{}'.format(lst)) # lst:[1, 3, 5]
    print('lst:',lst) # lst: [1, 3, 5]
    
  2. 创建属性的两种方式

    返回property属性,典型的用法:

    class C:
        def __init__(self):
            self._x=None
        def getx(self):
            return self._x
        def setx(self,value):
            self._x=value
        def delx(self):
            del self._x
        # 使⽤property类创建 property 属性
        x = property(getx, setx, delx, "I'm the 'x' property.")
    

    使⽤python装饰器,实现与上完全⼀样的效果代码:

    class C:
        def __init__(self):
            self._x=None
        @property
        def x(self):
            return self._x
        @x.setter
        def x(self,value):
            self._x=value
        @x.deleter
        def x(self):
            del self._x
    

    装饰器:

    装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

    简言之,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。

    装饰器就是咱们的手机壳,你尽管套上了手机壳,但并不影响你的手机功能,可你的手机还是该可以给你玩,该打电话打电话,该玩游戏玩游戏,而你的手机就变成了带手机壳的手机。

    *args就是就是传递一个可变参数列表给函数实参,这个参数列表的数目未知,甚至长度可以为0。

    **kwargs则是将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值

    args和kwargs不仅可以在函数定义中使用,还可以在函数调用中使用。在调用时使用就相当于pack(打包)和unpack(解包),类似于元组的打包和解包。

    def test_args_kwargs(arg1, arg2, arg3):
        print("arg1:", arg1)
        print("arg2:", arg2)
        print("arg3:", arg3)
    
    args = ("two", 3, 5)
    test_args_kwargs(*args)
    '''
    arg1: two
    arg2: 3
    arg3: 5
    '''
    
    kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
    test_args_kwargs(**kwargs)
    '''
    arg1: 5
    arg2: two
    arg3: 3
    '''
    
  3. 创建range序列

    1. range(stop)
    2. range(start,stop[,step])
    range(11) # range(0,11)
    
  4. 反向迭代器

    rev=reversed([1,4,2,3,1])
    for i in rev:
        print(i)
        
    '''
    1
    3
    2
    4
    1
    '''
    
  5. 四舍五入

    ndigits代表小数点后保留几位

    round(10.022222222,3) # 10.022
    
  6. 转为集合类型

    返回一个set对象,集合内不允许有重复元素。

    a=[1,4,2,3,1]
    set(a) # [1,2,3,4]
    
  7. 转为切片对象

    class slice(start, stop[, step])
    返回⼀个表⽰由 range(start, stop, step) 所指定索引集的 slice对象,它让代码可读性、可维护性变好。

    a=[1,4,2,3,1]
    my_slice_meaning=slice(0,5,2)
    a[my_slice_meaning] # [1,2,1]
    
  8. 拿来就用的排序函数

    sort 与 sorted 区别:

    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

    list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

    a=[1,4,2,3,1]
    sorted(a,reverse=True) # [4,3,2,1,1]
    # reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
    
  9. 求和函数

    a=[1,4,2,3,1]
    sum(a) # 11
    sum(a,12) # 23
    
  10. 转元组

    tuple()将对象转为一个不可变的类型序列

    i_am_list=[1,3,5]
    i_am_tuple=tuple(i_am_list)
    i_am_tuple # (1, 3, 5)
    
  11. 查看对象类型

    class type(name, bases, dict)传⼊⼀个参数时,返回 object 的类型:

    class Student():
        def __init__(self,id,name):
            self.id=id
            self.name=name
        def __repr__(self):
            return 'id='+self.id+'name='+self.name
    xiaoming=Student(id='001',name='xiaoming')
    type(xiaoming) # __main__.Student
    type(tuple()) # tuple
    
  12. 聚合迭代器

    创建⼀个聚合了来⾃每个可迭代对象中的元素的迭代器:

    x=[3,2,1]
    y=[4,5,6]
    list(zip(y,x)) # [(4, 3), (5, 2), (6, 1)]
    
  13. nonlocal用于内嵌函数中

    关键词 nonlocal常⽤于函数嵌套中,声明变量 i 为⾮局部变量; 如果不声明, i+=1表明 i 为函数wrapper内的局部变量,因为在 i+=1引⽤(reference)时,i未被声明,所以会报 unreferenced variable的错误。

    def excepter(f):
        i = 0
        t1 = time.time()
        def wrapper():
            try:
                f()
            except Exception as e:
                nonlocal i
                i += 1
                print(f'{e.args[0]}: {i}')
                t2 = time.time()
                if i == n:
                    print(f'spending time:{round(t2-t1,2)}')
        return wrapper
    
  14. global声明全局变量

    先回答为什么要有 global,⼀个变量被多个函数引⽤,想让全局变量被所有函数共享。有的伙伴可能会想这还不简单,这样写:

    i = 5
    def f():
        print(i)
    def g():
        print(i)
        pass
    f()
    g()
    '''
    5
    5
    '''
    

    f和g两个函数都能共享变量 i ,程序没有报错,所以他们依然不明⽩为什么要⽤ global.但是,如果我想要有个函数对 i 递增,这样:

    def h():
        i += 1
    h()
    '''
    ---------------------------------------------------------------------------
    UnboundLocalError                         Traceback (most recent call last)
    <ipython-input-28-bafe41838c9e> in <module>
          1 def h():
          2     i += 1
    ----> 3 h()
    
    <ipython-input-28-bafe41838c9e> in h()
          1 def h():
    ----> 2     i += 1
          3 h()
    
    UnboundLocalError: local variable 'i' referenced before assignment
    '''
    

    此时执⾏程序,bang, 出错了! 抛出异常: UnboundLocalError,原来编译器在解释 i+=1时会把 i解析为函数 h()内的局部变量,很显然在此函数内,编译器找不到对变量 i 的定义,所以会报错。global就是为解决此问题⽽被提出,在函数h内,显⽰地告诉编译器 i 为全局变量,然后编译器会在函数外⾯寻找 i 的定义,执⾏完 i+=1后, i 还为全局变量,值加1:

    i = 0
    def h():
        global i
        i += 1
    h()
    print(i) # 1
    
  15. 链式比较

    i=3
    print(1<i<3)
    print(1<i<=3)
    '''
    False
    True
    '''
    
  16. 不用else和if实现计算器

    from operator import *
    def calculator(a, b, k):
        return {
        '+': add,
        '-': sub,
        '*': mul,
        '/': truediv,
        '**': pow
        }[k](a, b)
    
    calculator(3, 4, '**') # 81
    
    calculator(1, 2, '+') # 3
    
  17. 链式操作

    from operator import (add, sub)
    def add_or_sub(a, b, oper):
        return (add if oper == '+' else sub)(a, b)
    add_or_sub(1, 2, '-') # -1
    
  18. 交换两元素

    def swap(a, b):
        return b, a
    print(swap(1, 0)) # (0,1)
    
  19. 去最求平均

    def score_mean(lst):
        lst.sort()
        lst2=lst[1:(len(lst)-1)]
        return round((sum(lst2)/len(lst2)),1)
    lst=[9.1, 9.0,8.1, 9.7, 19,8.2, 8.6,9.8]
    score_mean(lst) # 9.1
    
  20. 打印九九乘法表

    for i in range(1,10):
        for j in range(1,i+1):
            print("%d*%d=%d"%(j,i,j*i),end='\t')
        print()
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leon.shadow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值