我的python学习笔记

(此文是在实际工程中遇到的一些小问题,给予解决和整理。解决方法大多来自网上零散的文章。)

1——如下代码,

a=[1,2,3]
b=a

b也是[1,2,3]了,接着

a[0]=4
a[1]=5
a[2]=6

此时a变成[4,5,6]了,再看b,a变了之后没有对b进行新的引用,但b还是变了,自动的也变成[4,5,6]了。

除非对a进行新的赋值,比如

>>>a=[7,8,9]
>>>a
>>>[7,8,9]
>>>b
>>>[4,5,6]

 这是因为列表被定义为是可变类型,相对的是不可变类型。如Python文档所示:

12

3

可以看到,不可变类型只有:数字,字符串,元组。其它的类型都是可以在名字不变的情况下,对其内容进行修改,并且会影响到其他引用它的变量。

 再比如:

 >>>a=[1]
 >>>c=[]
 >>>c.append(a)
>>>c [[1]] >>>a.append(2) >>>c [[1,2]]

 1.1——父作用域属性不会影响到子作用域。

>>> a = 0
>>> a = [1]
>>> c = (a)
>>> type(c)
list
>>> c = (a, 1)
>>> type(c)
tuple
>>> a.append(2)
>>> c
([1, 2], 1)

即元组不可变,但其内部的可变类型,如列表,可以随时改变

2——当你需要引用一个数组的其中一部分,而此数组的长度是不确定的,导致你有可能引用的范围超过了它的长度,可以在引用范围中加上一个冒号:

a_list = []            #此两行代码是正确的,不会报错
b_list = a_list[-1:]   #比如-1后面的冒号

  此时如果使用b_list=a_list[-1],程序会报错,“IndexError: list index out of range”;再比如

  a_list 的长度随着程序的运行会变化,有可能是长3,也有可能变成5个元素,但必须保证b_list不能包含a_list的后面四个元素,

  此时可以使用

  b_list = a_list[:-4]

  这样,即使a_list==[1,2,3],b_list也能成功引用,结果是b_list==[] 。

3——参数前加上单星号或双星号

4——改变对象值的方法是没有返回值的。比如

>>list_2 = list_1.reverse()
>>print(type(list_2))
>>NoneType
 

>>
>>list_2 = list_1.remove(n)
>>print(type(list_2))
>>NoneType
>>

 

 

 

 

5——max函数可加入参数key,

d = {'9':1, '11':1}
max(d) 
>>

 

 6--json会把字典的数字键改为str

7____python中有两个判断语句:==is

  不能混用,==用来比较变量的值是否相等,is 用来判断变量的内存地址是否一样

tuple_1 = ("a",)
tuple_2 = ("a",)
print("tuple_1 == tuple_2:\n", tuple_1 == tuple_2)
print("id(tuple_1) == id(tuple_2):\n", id(tuple_1) == id(tuple_2))
print("tuple_1 is tuple_2:\n", tuple_1 is tuple_2)
print("tuple_1[0] == tuple_1[0]:\n", tuple_1[0] == tuple_1[0])
print("id(tuple_1[0]) == id(tuple_2[0]):\n", id(tuple_1[0]) == id(tuple_2[0]))
print("tuple_1[0] is tuple_1[0]:\n", tuple_1[0] is tuple_1[0])

输出:

tuple_1 == tuple_2:
 True
id(tuple_1) == id(tuple_2):
 False
tuple_1 is tuple_2:
 False
tuple_1[0] == tuple_1[0]:
 True
id(tuple_1[0]) == id(tuple_2[0]):
 True
tuple_1[0] is tuple_1[0]:
 True
可以这么说:
is== 的子集。
参考:https://www.cnblogs.com/CheeseZH/p/5260560.html
posted @ 2018-08-24 11:47  Oler  阅读(267)  评论(0编辑  收藏  举报