2015/8/26 Python基础(1):基本规则及赋值
Python有如下的基本规则:
#后表示注释
\n是行分隔符
\是继续上一行,将过长语句分开
;分号将两个语句连接在一行中
:冒号将代码头和体分开
代码块用缩进块的方式体现
不同缩进深度分隔不同的代码块
Python文件用模块的形式组织
缩进推荐风格,缩进四个空格宽度,避免使用制表符。
赋值语句
Python中,主要赋值运算符是等号( = )
赋值不是直接将一个值赋给一个变量,对象是通过引用传递的。不管变量是新创建的还是已经存在的,都是将该对象的引用赋值给变量。
C语言中,赋值语句可以当成一个表达式,可以返回值。但在Python中,赋值语句不会返回值。这使得这样的语句是非法的
>>> y = (x = x + 1) # assignments not expressions! File "<stdin>", line 1
y = (x = x + 1)
^
SyntaxError: invalid syntax >>> if (a = 3): SyntaxError: invalid syntax
这就避免了判断语句中,将 == 符号误写成 = 的问题。是一个很好的功能。
同样的Python中链式赋值并没有问题。
>>> y = (x = x + 1) # assignments not expressions! File "<stdin>", line 1
y = (x = x + 1)
^
SyntaxError: invalid syntax >>> if (a = 3): SyntaxError: invalid syntax
同时还有增量赋值符
+= -= *= /= %= **=
<<= >>= &= ^= |=
相对于普通赋值不仅仅是写法改变,最有意义的变化是第一个对象仅被处理一次。
Python不支持x++或--x这样的前置/后置自增/自减运算
多元赋值
>>> x, y, z = 1, 2, 'a string'
>>> x
1
>>> y
2
>>> z
'a string'
>>> x, y, z
(1, 2, 'a string')
赋值时将等号两边的对象都看成元组
使用多元赋值的方法可以不使用中间变量直接交换表量的值
>>> x , y = 1, 2
>>> x, y
(1, 2)
>>> x, y = y, x
>>> x, y
(2, 1)
专用下划线标识符
_xxx 不用'from module import *'导入
__xxx__系统定义名字
__xxx 类中私有变量名
风格提示: 避免用下划线作为变量名的开始
下划线对于解释器有特殊的意义,而且是内建标识符所使用的符号,所以应避免下划线作为变量名的开始。一般来讲_xxx被看做私有的,在模块或类外不可使用,所以当变量是私有时,用_xxx是很好的习惯。因为__xxx__有特殊含义,所以普通变量命名应避免这种风格
关于变量的赋值部分
Python的变量的赋值都是引用。这设计到它的内存管理机制。Python使用了引用计数这一简单技术。内部记录着所有使用中的对象各有多少引用。
当对象被创建时,就创建一个引用计数,当对象不背需要时,即引用计数为0时就被垃圾回收。
当对象被创建并赋值给变量时,该对象的引用计数就被设置为 1
当同一个对象又被赋值给其它变量时,或者作为参数传递给函数,方法或类实例时,或者被赋值为一个窗口对象的成员时,该对象的一个新的引用或者称别名,就被创建(引用计数加1)
x = 2
y = x
第一句创建了一个整数对象并引用赋值给x。x是第一个引用,该对象的引用计数设置为 1 。当y = x 语句执行时,并没有为y创建一个新对象,而是该对象的引用计数增加了1次。这是引用计数的增加。同样还有作为参数被函数调用,或者对象被加到某个容器对象中时。
而当变量被赋值给另一个对象时,原对象的引用计数也会自动减 1
foo = 3
foo = ''
当3被创建赋值给foo时,引用计数是1 。 当它重新赋值给对象'123'时,3的引用计数自动减1
当本地引用离开了作用范围,比如函数结束时。
对象别名被显式的销毁
对象别名被赋值给其他对象
对象从一个窗口对象中移除
窗口对象本身被销毁
这几个情况都会减少引用计数
2015/8/26 Python基础(1):基本规则及赋值的更多相关文章
- 2015/9/29 Python基础(20):类的授权
类的授权 1.包装包装在Python编程世界中时经常会被提到的一个术语.它是一个通用的名字,意思是对一个已存在的对象进行包装,不管它是数据类型,还是一段代码,可以是对一个已存在的对象,增加新的,删除不 ...
- 2015/10/9 Python基础(21):可调用和可执行对象
在Python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的Python脚本,或执行一个磁盘上的文件,或通过网络来运行文件.这完全取决于想要干什么.特定的环境包括: 在当前脚本继续运行 创 ...
- 2015/9/28 Python基础(19):类的定制和私有性
用特殊方法定制类前面我们讲了方法的两个重要方面:首先,方法必须在调用前被绑定(到它们相应类的某个实例中):其次,有两个特殊方法可以分别作为构造器和解构器的功能,分别名为__init__()和__del ...
- 2015/9/22 Python基础(18):组合、派生和继承
一个类被定义后,目标就是把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其他数据类型及逻辑执行流混合使用.有两种方法可以在你的代码中利用类.第一种是组合,就是让不同的类混合并加入到其他类中, ...
- 2015/9/21 Python基础(17):绑定和方法调用
绑定和方法调用现在我们需要再次阐述Python中绑定(binding)的概念,它主要与方法调用相关联.方法是类内部定义的函数,这意味着方法是类属性而不是实例属性.其次,方法只有在其所属的类拥有实例时, ...
- 2015/9/20 Python基础(16):类和实例
面向对象编程编程的发展已经从简单控制流中按步的指令序列进入到更有组织的方式中,依靠代码块可以形成命名子程序和完成既定的功能.结构化的或过程性编程可以让我们把程序组织成逻辑快,以便重复或重用.创造程序的 ...
- 2015/9/19 Python基础(15):变量作用域及生成器
变量作用域标识符的作用域是定义为其声明的可应用范围,或者即是我们所说的变量可见性.也就是,我们可以在程序的那个部分去访问一个制定的标识符.全局变量与局部变量定义在函数内的变量有局部作用域,在一个模块中 ...
- 2015/9/18 Python基础(14):函数式编程
这篇写了忘发.现在补上. Python不是也不大可能成为一种函数式的编程语言,但是它支持许多有价值的函数式编程语言构建.也有些表现的像函数式编程机制但是从传统上也不能认为是函数式编程语言的构建.Pyt ...
- 2015/9/17 Python基础(13):函数
函数是对程序逻辑进行结构化或过程化的一种编程方法. Python的函数返回值当什么也不返回时,返回了None和大多数语言一样,Python返回一个值或对象.只是在返回容器对象时,看起来像返回多个对象. ...
随机推荐
- 《剑指Offer》题一~题十
一.赋值运算符函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char *pData = nul ...
- 20145214 《Java程序设计》第5周学习总结
20145214 <Java程序设计>第5周学习总结 教材学习内容总结 try和catch Java中所有错误都会被包装为对象,可以尝试try执行程序并捕捉catch代表错误的对象后做一些 ...
- 一个例子说明mouseover事件与mouseenter事件的区别
<html> <head> <meta charset="UTF-8"> <title>haha</title> < ...
- cacti 添加tomcat监控
监控主机 192.168.24.69 ,以下用A表示 被监控主机 192.168.24.79,以下用B标识 一.A主机cacti中 1.导入TomcatStat中的xml模版 2.将TomcatSta ...
- Spring MVC 之@Controller@RequestMapping详解
一:配置web.xml 1)问题:spring项目中有多个配置文件mvc.xml dao.xml 2)解决:在web.xml中 <init-param> <param-name& ...
- Delphi Code Editor 之 快捷菜单
Code Editor的快捷菜单分为两个部分:编辑器菜单项和调试器菜单项. 调试器菜单项留作以后讲解调试应用程序时再讲,这里只讲讲Code Editor的编辑器快捷菜单项. 下面列出了全部菜单项及描述 ...
- springBoot配置分析(属性和结构化)
使用idea自带插件创建项目 一直下一步到完成 application.properties local.ip.addr = 192.168.2.110 redis.host = 192.168.3. ...
- getline读取整行文本// isprint
getline——读取整行文本 这个函数接受两个参数:一个输入流对象和一个string对象.getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符.和输入操作符不一样 ...
- context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置
context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置
- hdu 2962 Trucking (最短路径)
Trucking Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...