在python中,变量赋值的语法比较简单,语法就是 "变量名 = 对象",由于python属于动态语音,所以不需要像c、 java那样在变量赋值时需要声明变量的类型.
c 变量赋值
int x = 1;
python 变量赋值
x = 1
y = "hello world!"
b = ('a', 'b')
c = {"foo": "bar"}
python 变量赋值中,所涉及到的变量命名是有一定规则的:
① 变量名只能包含字母、数字和下划线.变量名可以字母或下划线开头,但不能以数字开头,例如,可将变量命名为name_1,但不能将其命名为1_name
再说变量赋值中赋予给变量的值,python中万事皆对象,所以python中只要是对象就能给变量赋值.如:
x = 1 # x赋值为数字1;
x = sum # x赋值为内建求和函数sum;
python的赋值真实上说应该不是赋值,而更像是"引用",如何理解"引用"呢,python中一直对象的生成是会在内存中分配给一个内存地址,这个内存地址可以使用id()方法去获取,然后在变量赋值时,将变量直接引用该对象的内存地址,进而完成变量赋值,如:
x = 1, 赋值时x直接引用1所在内存的地址, y = x, 此时是y直接引用x的所指向的内存地址
python中有判断变量的方法如 is() 和 ==,二者在判断变量时是有区别的,is函数是判断变量的内存地址是否相同,而 == 是判断变量的值是否相同,举例说明:
? a = 1; b = 1.0
? a is b? # False
? a == b # True
小心python变量赋值的陷阱
? 看到上面的所述知道了python变量赋值实则是引用,引用的是对象的内存地址.所赋的值可以分两类,一类是可变的,如列表,字典,集合;一类是不可变的,如字符串、元组.所以当对象为可变类型时就会出现一种情景,我们举例说明:
? y = x
? print x == y? ? # True
? print x is y? ? # True
对于Python的初学者,在对象的使用过程中,由于对变量的赋值和对象的复制中的概念模糊,导致程序出错.
例如,下面的代码:
输出结果为:
a等于b?True
a等于c?True
a是b?True
a是c? False
可以看到,a,b, c所指向的对象的值都相同(a==b为True). a和b都是代表同一个对象(a is b为True).当我们通过变量b对该列表进行修改时,由于a也指向该列表,所以当打印a,b时,我们得到相同的值. 而a和c则是代表不同的对象(a is c为False),所以修改b所指向得列表不会改变c梭子乡的列表的值.
在Python中,所有的变量都代表了对象,即便是简单的数字类型(int, float, bool),也是以对象的形式存在的.我们看下面的代码:
输出结果是:
a==b为True
a is b为True
可见,a, b都是指向同一个对象.此时此刻呢,进行下面的操作,
a is b为False
与前面的列表不同,当我们对b做修改时,实际上是给b赋予了一个新生成的对象,对数值类型来说,所有的数值运算都会创建一个数值对象,并将这个对象指定给变量.所以呢,a与b指向了不同的对象,数值也不同.
再回过头来看列表对象,
我们知道,b是与a指向同一对象的变量,使用b对该对象进行修改,与使用a对该对象进行修改,效果是完全一样的.如果我们需要需要一个与a完全相同又与a相互独立的列表,那么就需要复制这个对象,也就是新建一个内容和源对象相同的对象.
对于列表来说,最简单的复制方法是通过下标索引的方式创建新的列表:
对于各种数据类型通用的对象拷贝复制,我们可以使用python内建的copy模块.
对于复杂对象(如嵌套列表)的复制,则需要注意区分浅拷贝和深拷贝.我们来看下面的代码:
得到的结果是:
a[0] is b[0]为 True
a[0] is c[0]为 False
a[1] is b[1]为False
从上面的代码我们可以看到,copy函数为浅拷贝,只拷贝了对象的外层,而对象内部所包含的对象仍然指向原有的对象.而deepcopy则为深拷贝,对象内部的对象也进行了复制.
以上我们对变量的赋值和对象的复制做了更加深入的分析.在具体的使用中,我们需要根据具体来决定使用赋值、浅拷贝、深拷贝.
python赋值语句规则如下:
赋值语句必须是在赋值号(=)的左边是变量或对象的某个属性,不能是表达式.
①.、赋值号(=)的右边是变量值、对象属性的值、表达式的值、计算式的值、函数值等等,不能是变量或对象.
Python简介:
Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发.
以上内容参考:百度百科—Python
python没有大括号,大括号是C/C◆◆、Java等语言用于标记语句块的语法,Python通过缩进标记语句块,不需要大括号.
F=a◆b,b=a,a=F
把上面的语句拆分成三条语句即可.
函数
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载.为了增强代码的可读性,可以在函数后书写"文档字符串"(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等.可以使用内置函数help()打印出函数的使用帮助.
以上内容参考:百度百科-Python
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:
第一段:基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的.
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本.
另一种获取已排序的列表副本的方法是使用sorted函数:
sorted返回一个有序的副本,并且类型总是列表,如下:
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
第二段:自定义比较函数
可以定义自己的比较函数,然后通过参数传递给sort方法:
第三段:可选参数
sort方法还有两个可选参数:key和reverse
①.、key在使用时必须提供一个排序过程总调用的函数:
x = ['mmm', 'mm', 'mm', 'm' ]x.sort(key = len)print x # ['m', 'mm', 'mm', 'mmm']
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个.
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}