.. . .. . .
在函数定义的变量与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。这称为变量的作用域。
global语句, 为定义在函数外的变量赋值时使用global语句。
def func(): global x
print \ x = 1
x = 3 func() print x #3 #1
3. 默认参数
通过使用默认参数可以使函数的一些参数是‘可选的’。
def say(msg, times = 1): print msg * times
say(\say(\
注意:只有在形参表末尾的那些参数可以有默认参数值,即不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参,只是因为赋给形参的值是根据位置而赋值的。
4. 关键参数
如果某个函数有很多参数,而现在只想指定其中的部分,那么可以通过命名为这些参数赋值(称为‘关键参数’)。
优点:不必担心参数的顺序,使函数变的更加简单;假设其他参数都有默认值,可以只给我们想要的那些参数赋值。
def func(a, b=2, c=3):
print \
func(1) #a is 1, b is 2, c is 3 func(1, 5) #a is 1, b is 5, c is 3
func(1, c = 10) #a is 1, b is 2, c is 10
func(c = 20, a = 30) #a is 30, b is 2, c is 20
S. . . . . ..
.. . .. . .
5. return 语句
return语句用来从一个函数返回,即跳出函数。可从函数返回一个值。
没有返回值的return语句等价于return None。None表示没有任何东西的特殊类型。
6. DocStrings (文档字符串)
def func():
'''This is self-defined function
Do nothing''' pass
print func.__doc__
#This is self-defined function #
#Do nothing
五、模块
模块就是一个包含了所有你定义的函数和变量的文件,模块必须以.py为扩展名。模块可以从其他程序中‘输入’(import)以便利用它的功能。
在python程序中导入其他模块使用'import', 所导入的模块必须在sys.path所列的目录中,因为sys.path第一个字符串是空串''即当前目录,所以程序中可导入当前目录的模块。
1. 字节编译的.pyc文件
导入模块比较费时,python做了优化,以便导入模块更快些。一种方法是创建字节编译的文件,这些文件以.pyc为扩展名。
pyc是一种二进制文件,是py文件经编译后产生的一种byte code,而且是跨平台的(平台无关)字节码,是有python虚拟机执行的,类似于
java或.net虚拟机的概念。pyc的容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。
2. from .. import
如果想直接使用其他模块的变量或其他,而不加'模块名+.'前缀,可以使用from .. import。
例如想直接使用sys的argv,from sys import argv 或 from sys import *
3. 模块的__name__
S. . . . . ..
.. . .. . .
每个模块都有一个名称,py文件对应模块名默认为py文件名,也可在py文件中为__name__赋值;如果是__name__,说明这个模块被用户
单独运行。
4. dir()函数
dir(sys)返回sys模块的名称列表;如果不提供参数,即dir(),则返回当前模块中定义名称列表。
del -> 删除一个变量/名称,del之后,该变量就不能再使用。
六、数据结构
python有三种建的数据结构:列表、元组和字典。
1. 列表
list是处理一组有序项目的数据结构,列表是可变的数据结构。列表的项目包含在方括号[]中,eg: [1, 2, 3], 空列表[]。判断列表中是否包含某项可以使用in, 比如 l = [1, 2, 3]; print 1 in l; #True;支持索引和切片操作;索引时若超出围,则IndexError;使用函数len()查看长度;使用del可以删除列表中的项,eg: del l[0] # 如果超出围,则IndexError
list函数如下:
append(value) ---向列表尾添加项value
l = [1, 2, 2]
l.append(3) #[1, 2, 2, 3]
count(value) ---返回列表中值为value的项的个数
l = [1, 2, 2]
print l.count(2) # 2
extend(list2) ---向列表尾添加列表list2
l = [1, 2, 2] l1 = [10, 20] l.extend(l1)
print l #[1, 2, 2, 10, 20]
index(value, [start, [stop]]) ---返回列表中第一个出现的值为value的索引,如果没有,则异常 ValueError
l = [1, 2, 2] a = 4 try:
print l.index(a) except ValueError, ve:
print \
S. . . . . ..
.. . .. . .
insert(i, value) ---向列表i位置插入项vlaue,如果没有i,则添加到列表尾部
l = [1, 2, 2]
l.insert(1, 100)
print l #[1, 100, 2, 2]
l.insert(100, 1000)
print l #[1, 100, 2, 2, 1000]
pop([i]) ---返回i位置项,并从列表中删除;如果不提供参数,则删除最后一个项;如果提供,但是i超出索引围,则异常IndexError
l = [0, 1, 2, 3, 4, 5]
print l.pop() # 5 print l #[0, 1, 2, 3, 4]
print l.pop(1) #1 print l #[0, 2, 3, 4] try:
l.pop(100)
except IndexError, ie:
print \
remove(value) ---删除列表中第一次出现的value,如果列表中没有vlaue,则异常ValueError
l = [1, 2, 3, 1, 2, 3]
l.remove(2)
print l #[1, 3, 1, 2, 3] try:
l.remove(10) except ValueError, ve:
print \
reverse() ---列表反转
l = [1, 2, 3] l.reverse()
print l #[3, 2, 1]
S. . . . . ..
.. . .. . .
sort(cmp=None, key=None, reverse=False) ---列表排序
【Python Library Reference】
cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument:
\
key:key specifies a function of one argument that is used to extract a comparison key from each list element: \
reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an
equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.
l5 = [10, 5, 20, 1, 30] l5.sort()
print l5 #[1, 5, 10, 20, 30]
l6 = [\
l6.sort(cmp = lambda s1, s2: cmp(s1[0],s2[1])) print l6 #['abc', 'bbb', 'bcd', 'cde']
l7 = [\l7.sort(key = lambda s: s[1])
print l7 #['faf', 'abc', 'bbb', 'bcd', 'cde']
2. 元组
tuple和list十分相似,但是tuple是不可变的,即不能修改tuple,元组通过圆括号中用逗号分割的项定义;支持索引和切片操作;可以使用 in
查看一个元素是否在tuple中。空元组();只含有一个元素的元组(\需要加个逗号
优点:tuple比list速度快;对不需要修改的数据进行‘写保护’,可以是代码更安全
tuple与list可以相互转换,使用置的函数list()和tuple()。
l = [1, 2, 3]
print l # [1, 2, 3]
t = tuple(l)
print t # (1, 2, 3)
l1 = list(t)
print l1 #[1, 2, 3]
S. . . . . ..
Python基础语法 - 图文
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)