zoukankan      html  css  js  c++  java
  • 99%的人都会忽略的Python易错点总结

    python中复数实现(-2)**0.5和开根号sqrt(-2)的区别

    (-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的。

    print((-2)**0.5)
    #输出:(8.659560562354934e-17+1.4142135623730951j)
    
    import math
    math.sqrt(-2)#报错
    ValueError: math domain error
    

    Python用循环构造的函数数组,运行这个数组里面的函数后返回值都一样

    functions = []
    for i in range(5):
        def f(x):
          return x + i
        functions.append(f)
    
    for f in functions:
        print(f(7))
    
    上面程序的输出是:
    11
    11
    11
    11
    11
    

    为什么明明f(x)返回的是x+i,而i是从0到4变化的。按道理执行f(x)后的返回值也应该是变化的,为何我们执行f(x)后是5个一样的值。
    答:这是因为python中函数保存的外面的变量都是存储的是地址。也就是说x+i中的i是地址,循环执行完成后。i这个地址的值变成了4.所以最后执行f(7)就是一直是11==7+4.
    不信你可以输出id(i)试试。

    注意: Python取变量的地址的方法是id(变量名)。

    Python数组列表list中extend()和append()的区别

    代码举例说明

    x = [1,2,3]
    print(x.extend([2,3,4]))
    """
    输出:
    [1,2,3,2,3,4]
    """
    print(x.append([2,3,4]))
    """
    输出:
    [1,2,3,[2,3,4]]
    """
    

    可以看到:

    • extend()是把参数通过合并的形式融合到原来的列表里面。(融合)
    • append()是把参数当做一个元素加到原来列表里面。(吞并)

    Python类变量,类名取变量(className.x)和self取变量(self.x)之间的区别?

    1. 类名取变量 和 self取变量它们初始值的地址是完全一样。 (意味着值也一样)
    2. 用类名取变量不会影响他们变量的地址。(以为着用类名取变量并且修改变量使得两种取变量的方式值都发生变化)
    3. 但是用self取变量方式修改变量就会使得它们地址变得不一样。(这意味着修改self取的变量只会影响self取变量这种方式的值,不会影响类名取变量方式的值)

    看代码理解这3句话:

    class Car:
      color = 'gray'
      def describe_car(self):
        return  Car.color 
      def describe_self(self):
        return  self.color 
     
    test = Car()
    # 类名取Car.color和self.color初始值是一样的.因为此时他们的地址是完全一样的.
    print(test.describe_car()) #输出:gray 
    print(test.describe_self()) # 输出:gray 
    print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
    
    # 先修改Car.color会影响self.color。因为此时他们的地址是完全一样的
    Car.color = 'red'
    print(test.describe_car()) #输出:red
    print(test.describe_self()) # 输出:red
    print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
    
    # 修改self.color不会影响Car.color,因为此时他们地址变得不一样了。
    test.color = 'blue'
    print(test.describe_car()) #输出:red
    print(test.describe_self()) # 输出:blue
    print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
    
    # 经过上一步此时他们两地址不一样了。修改Car.color不会影响self.color。因为此时他们的地址是不一样的
    Car.color = 'black'
    print(test.describe_car()) #输出:black
    print(test.describe_self()) # 输出:blue
    print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
    

    tuple元组不可以修改元素,这是元组和List列表的区别之一

    x = (0,1,2)
    x[0]=-1#这是错误的会报错
    TypeError: 'tuple' object does not support item assignment
    

    Python魔法方法magic method,变量的顺序问题

    __mul__(self,other),调用这个魔术方法是self*other,它实际这这样执行的:self.__mul(other)

    知乎 https://www.zhihu.com/people/yuanmuou/activities
  • 相关阅读:
    Ubuntu 8.04安设nVidia新版表现驱动
    特性化设置你的linux环境
    Ubuntu 8.04 去失踪文泉驿的点阵字形的方法
    Fedora Nightlife项目 扶助较劲争论机的空闲
    Ubuntu显卡驱动不精确,进入黑屏的处置装备
    Linux中翻开带flash网页主动封锁的处理办法
    Firefox 3 Alpha 5
    Ubuntu 8.04无法正常关机成就处置惩罚
    Redhat Enterprise Linux 5.2 公布了
    KOffice 1.6.3
  • 原文地址:https://www.cnblogs.com/ailitao/p/11047296.html
Copyright © 2011-2022 走看看