美文网首页
python语言那些...

python语言那些...

作者: 霡霂976447044 | 来源:发表于2019-02-16 16:40 被阅读10次
    • 值传递还是引用传递
      引用传递,只是在遇到传递不可变对象时像值传递。
      对于不可变对象的函数传参,依然是传的引用(地址)。对于简单类型,在函数内对其操作之所以不会影响函数范围外的值,是因为运算中的赋值操作产生了新的对象,而不是对原有对象的改变。而对于一些复杂类型,就可以比较清晰的看出,函数内参数的改变同样会影响函数外的变量。

    • *args **kwargs

    def foor(*args **kwargs)
        bar(*args **kwargs)
    # * 以元组的方式传递, **以键值对
    

    形参名叫args不叫args, bar(args **kwargs) 称为自动解包

    • property的应用
    class Goods(object):
        def __init__(self):
            # 原价
            self.original_price = 100
            # 折扣
            self.discount = 0.8
        @property
        def price(self):
            # 实际价格 = 原价 * 折扣
            new_price = self.original_price * self.discount
            return new_price
        @price.setter
        def price(self, value):
            self.original_price = value
        @price.deleter
        def price(self):
            del self.original_price
    obj = Goods()
    obj.price         # 获取商品价格
    obj.price = 200   # 修改商品原价
    del obj.price     # 删除商品原价
    
    • thread的join的daemon
      join(timeout)方法的作用是,等待子线程执行完,会阻塞主线程后面的代码。
      daemon属性设置为True时,主线程执行完,子线程也会停止。设置为False时,主线程执行完,会等待子线程执行完。
      join是直接阻塞主线程,daemon是设置执行完后是否阻塞。

    • 列表切片

    x = [i/2 for i in range(4, 49)]
    x[::2] # 每两个取一个
    
    • 列表表达式
    x = [i/2 for i in range(4, 49)]
    y = [random.randint(20, 35) for i in range(120)]  # 产生120个随机数,范围在20-35之间
    x3 = ["10点{}分".format(i) for i in range(60)]
    
    • 导包问题
      from 导包只能import子一级的模块或者对象
      相对路径导包方法的name 不能是main
      多次相同的导包不会覆盖
      导同一个包有多种方式可能会造成多次导包

    • GIL全局锁
      GIL全局锁是python解释器的问题,在CPython解释器里面,同一时刻只能一个线程在运行。
      并不容易解决这个问题。
      对于开发者来说, 在IO密集用多线程还是有效的,如果需要更加高效的,可以使用多进程,其他java解释器。或者其它语言实现。

    相关文章

      网友评论

          本文标题:python语言那些...

          本文链接:https://www.haomeiwen.com/subject/accieqtx.html