python中用#
号进行注释
如果一个语句需要跨行,那么需要用\
来连接两个跨行的语句
if name == ‘qeesung‘ and age == 23
在两种情况下是不需要使用反斜线来进行跨行连接的:
列表
,元组
,字典
的时候就可以进行跨行alist = [2,2,3,4, 5,6,7,8 ]
test_str = ‘‘‘Hello
World This is Great World
‘‘‘
缩进一个相同的语句的代码快,我们称之为代码组
,比如if
,while
,class
等语句都是:
结束的
python是通过所经代码来区分代码块的。随着缩进深度的增加,代码的层次也在加深,没有缩进的代码是最高层次的,被称为脚本的主体(main)
部分
之间我们讲过用\
来将一个语句写在多行,现在我们可以用;
来将多个语句写在一行
import sys ; x = ‘foo‘ ; sys.stdout.write(x+‘\n‘)
每一个python脚本文件都可以被当做是一个模块,模块以磁盘文件的形式存在。
模块里的代码可以是一段直接执行的脚本,也可以是的一堆类似库函数的代码
首先我们先来理解一下什么叫做对象
,对象就是一个在内存中有类型的区域。
python语句里面,=
是主要的赋值操作符
anInt = 12
aString = ‘Hello World‘
# ...
注意:
x = 1
y = (x=x+1)# error , 赋值语句不返回值
所谓的增量赋值就是采用下面的操作符:+=
,-=
,**=
等操作符
注意:
增量赋值和一般的赋值操作不仅仅是写法上的改变,还有更加深层次的改变:
下面举个栗子:
一般赋值操作
print ‘+‘*6, ‘ number ‘, ‘+‘*6
number1 = 1
print id(number1)
number1 = 2
print id(number2)
print
print ‘+‘*6,‘ list ‘ , ‘+‘*6
list1 = [1,2,3]
print id(list1)
list1 = [4,5,6]
print id(list1)
运行结果:
++++++ number ++++++
157259952
157259940
++++++ list ++++++
3077201548
3074661452
可见一般的赋值操作是会改变变量指向的对象的
增量赋值操作
print ‘+‘*6, ‘ number ‘, ‘+‘*6
number1 = 1
print id(number1)
number1 += 2
print id(number2)
print
print ‘+‘*6,‘ list ‘ , ‘+‘*6
list1 = [1,2,3]
print id(list1)
list1 += [4,5,6]
print id(list1)
运行结果:
++++++ number ++++++
159398064
159398040
++++++ list ++++++
3077873292
3077873292
所以对于不可变对象来说,增量赋值操作是会改变变量指向的对象的,对于可变对象来说,增量操作是不会改变变量指向的对象的
看下面的栗子:
x = y = z = 1
新建了一个值为1
的整形对象,然后将其引用传给x
,y
,z
,三个变量
多元赋值其实就是元组的赋值
x, y, z=1, 2, `a string`
实际上就是下面的元组赋值
(x, y, z)=(1, 2, ‘a string‘)
在编写一个python脚本的时候可以按照下面的布局进行编写:
- 起始行:
#/usr/bin/env python
- 模块文档:
‘‘‘ this is a test modle ‘‘‘
- 模块导入:
import sys
- 变量定义:
list1 ={} ;number1 = 0
- 类定义:
class MyClass:
- 函数定义:
def func():
- 主程序:
if __name__ == ‘__main__‘:
由于主程序代码不论是模块被导入还是直接执行都会运行,我们必须知道程序的运行方向,在某些情况下,一个应用程序需要导入另一个应用程序的一个模块,以便重用某些代码,这时,我们只想访问那些位域其他应用程序中的代码,而不想运行它们,我们可以通过__name__
来判断一个程序是作为模块被导入还是作为程序来运行:
__name__
就是模块的名字;__name__
的值就是__main__
于是我们可以利用上面的这种机制,来将测试代码也写在主程序中,在独立运行代码的时候,我们就运行测试代码,在作为模块被导入的时候,就什么都不做
举个栗子:
#/usr/bin/env python
‘‘‘there are math function‘‘‘
def my_add(number1 , number2):
return number1+number2
def my_sub(number1, number2):
return number1-number2
if __name__ == ‘__main__‘:
if 10 == my_add(4, 6):
print ‘add test pass‘
else:
print ‘add test failed‘
if -2 == my_sub(4, 6):
print ‘sub test pass‘
else:
print ‘sub test failed‘
如果我们直接运行这个脚本,那么就会运行测试代码,如果作为模块导入,就什么都不做
python定义的变量有下面的特性:
python里面的变量只有被创建和赋值后才能被使用,因为任何变量如果没有初始化,那么变量就没有任何意义。
在创建一个对象
的时候,就创建一个引用计数
,当这个对象不再需要时,也就是说,这个对象的引用计数变为0时,它就被垃圾回收。
当对象被创建并将其引用赋值给变量时,该对象的引用计数就被设置为1
举个栗子:
x = 3.14 # 创建一个浮点型对象,并将引用赋值给x,引用计数为1
y = x # 为x指向的浮点型对象新建一个新的别名,引用计数增加为2
还有一些其他方法也能增加对象的引用计数,比如将该对象作为参数传入函数,或者将对象加入到容器对象当中。
#对象被创建
x = 3.14
#另外的别名被创建
y = x
#作为参数传递给函数
foobar(x)
#成为容器对象的一个对象
list1=[123, x, ‘xyz‘]
当对象的引用被销毁时,引用计数会减少,比较常见的就是变量离开其作用范围时。比如函数运行结束时,所有的局部变量都被自动销毁,对象的引用计数就随之减少。
在下面的情况下,一个对象的引用计数会减少:
del x
x = 123
list1.remove(x)
del list1
del 语句会删除对象的一个引用,当del所删除的对象的引用计数减少为0以后,该对象就会被垃圾收集器回收
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/ii1245712564/article/details/46653007