python循环语句
while循环语法结构
当需要语句不断的重复执行时,可以使用while循环
while expression:
while_suite
语句ehile_suite会被连续不断的循环执行,直到表达式的值变成0或false
#!/usr/bin/env python
sum100 = 0
counter = 1
while counter <=100:
sum100 += counter
counter += 1
print "result is %d" % sum100
break语句
break语句可以结束当前循环然后跳转到下条语句写程序的时候,应尽量避免重复的代码
在这种情况下可以使用while-break结构
#!/usr/bin/env python
while true
name = raw_input('username:')
if name == 'tom':
break
continue语句
当遇到continue语句时,程序会终止当前循环,并忽略剩余的语句
然后回到循环的顶端,如果仍然满足循环条件,循环体内语句继续执行,否则退出
#!/usr/bin/env python
sum100 = 0
conuter = 0
while counter <=100:
counter += 1
if counter % 2:
counter
sum100 += counter
print "result is %d" % sum100
for循环
python中的for接受可迭代对象(列如序列或迭代器)作为其参数
每次迭代其中一个元素
与while循环一样,支持break,continue,else语句
一般情况下,循环次数未知采用while循环,循环次数已知采用for循环
range函数
for循环常与range函数一起使用,range函数提供循环条件
range函数的完整语法为:
range(start,end,step =1)
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(1,5)
[1, 2, 3, 4]
>>> range(1,5,2)
[1, 3]
>>>
xrange函数
xrange()类似range(),不过当你有一个很大的范围列表时,xrange()可能更为合适,因为它不会再内存里创建列表的完整拷贝
它只被用在for循环中,在for循环外使用它没有意义
它的性能远高出range(),因为它不生成整个列表
斐波那契数列
斐波那契数列就是某个数,总是前两个数之和,比如0,1,1,2,3,5,8
使用for循环和range函数编写一个程序,计算有10个数字的斐波那契数列
改进程序,要求用户输入一个数字,可以生成用户需要长度的斐波那契数列
#!/usr/bin/env python
fib = [0, 1,]
num = int(raw_input("number"))
for i in range(num -2):
fib.append(fib[-1] + fib[-2])
print fib
乘法口诀表
#!/usr/bin/env python
for i in range(1,10):
for j in range(1,i+1):
print "%sx%s=%s" % (j, i, i*j),
print
列表解析
它是一个非常有用,简单,而且灵活的工具,可以用来动态的创建列表
语法:
[expr for iter_var in iterable]
这个语句的核心是for循环,它迭代iterable对象的所有条目
expr应用于序列的每个成员,最后的结果值是该表达式产生的列表
>>> ['hail hydra' for i in range(2) ]
['hail hydra', 'hail hydra']
——————————————————————————————————————————————————————————————————————————————
文件对象
文件对象访问模式
r:读方式打开(文件不存在则报错)
w:写方式打开(文件存在则清空,不存在则创建)
a:追加模式打开(必要时创建新文件)
r+:读写模式打开
w+:读写模式打开
a+:读写模式打开
文件打开方式
open及file内建函数
作为打开文件之门的钥匙,内建函数open()以及file()提供了初始化输入/输出(I/O)操作的通用接口
成功打开文件后会返回一个文件对象。否则引发一个错误
open()方法和file()方法可以完全相互替换
基本语法
file_object = open(file_name,access_mode'r',buffering=-1)
文件输入
read方法
read()方法用来直接读取字节到字符串中,最多读取给定数目个字节
如果没有给定size参数(默认为-1)或者size值为负,文件将被读取直至末尾
>>> f = open('network.py')
>>> f.read()
'#!/usr/bin/env python\n\nfor i in range(1,10):\n for j in range(1,i+1):\n print "%sX%s=%s" % (j, i, i*j),\n print '
>>> f.close()(关闭的意思)
文件输出
write方法
write()内建方法功能与read()相反,它把含有文本数据或二进制数据块的字符串写入到文件中去
写入文件时,不会自动添加行结束标志,需要手工输入
>>> f = open('network.py', 'w')
>>> f.write()
>>> f.write('hail hydra')
>>> f.flush()
writelines方法
针对列表的操作,它接受一个字符串列表作为参数,将他们写入文件
行结束符并不会被自动加入,所以如果需要的话,必须在调用writelines()前给每行加上结束符
>>> f.writelines(['hail hydra \n','hail hydra \n'])
>>> f.close()
模拟cp操作
#!/usr/bin/env python
f1 = open('/bin/ls')
f2 = open('/root/ls','w')
data = f1.read()
f2.write(data)
f1.close()
f2.close()
——————————————————————————————————————————————————————————
函数
创建函数
函数是用def语句来创建的,语法如下
def function_name(arguments):
"function_documentation_string"
function_body_suite
标题行由def关键字,函数的名字,以及参数的集合组成
def子句的剩余部分包括了一个虽然可选但是强烈推荐的文档字串和必须的函数体
调用函数
同大多数语言相同,python用一对圆括号调用函数,如果没有圆括号,只是对函数的引用
>>> def foo():
... print 'hydra'
...
>>> foo()
hydra
>>> foo
<function foo at 0x7f45678c5c80>
函数的返回值
多数情况下,函数并不直接输出数据,而是向调用者返回值
函数的返回值使用return关键字,没有return的话,函数默认返回none
>>> def foo():
... res = 3+4
...
>>> i = foo()
>>> print i
None
函数参数
形式参数
函数定义时,紧跟在函数名后(圆括号内)的参数被称呼为形式参数
简称形参,由于它不是实际存在变量,所以又称之为虚拟变量
实际参数
在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为实际参数,简称实参
传递参数
调用函数时,实参的个数需要与形参个数一致,实参将依次传递给形参
位置参数
与shell脚本类似,程序名以参数都以位置参数的方式传递给python程序
使用sys模块的argv列表接收
默认参数
默认参数就是声明了默认值的参数,因为给参数赋予了默认值,所以在函数调用时,不向该参数传入值也是允许的
——————————————————————————————————————————————————————————————————
模块
模块是从逻辑上组织python代码的形式,当当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,
前提是保证它们的彼此交互,这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类
也可能是一组相关但彼此独立的操作函数
创建模块
模块物理层面上组织模块的方法是文件,每一个以.py作为结尾的python文件都是一个模块
模块名称切记不要与系统中已存在的模块重名,模块文件名字去掉后面的扩展名.py 即为模块名
导入模块
使用impo导入模块,模块被导入后,程序会自动生成pyc的字节码文件以提升性能
模块属性通过 "模块名.属性" 的方法调用,如果仅需要模块中的某些属性,也可以单独导入
加载模块
一个模块只被加载一次,无论它被导入多少次,只加载一次可以阻止多重导入时代码被多次执行
如果两个文件相互导入,防止了无限的相互加载
模块加载时,顶层代会自动执行,所以只将函数放入模块的顶层是良好的编程习惯
模块导入的特性
模块具有一个_name_特殊属性,当模块文件直接执行时,_name_的值为'_main_'
当模块被另一个文件导入时,_name_的值就是该模块的名字