可更改与不可更改对象
- 在Python中,string,tuples和numbers是不可更改对象,而list、dict是可以修改的对象。不可变类型,变量赋值 a = 5 后再赋值a = 10,这里实际是新生成了一个int对象,然后让a指向它,而原来的5对象被丢弃,而不是把5对象更改成10。可变对象就是在原来的对象上更改其数据。
- Python函数的参数传递。不可变类型类似值传递,如整数、元组、字符串,传递的只是参数的值,并不会影响对象本身。在函数中的任何操作都不会影响原来对象的值。而可变类型类似于引用传递,在函数中的操作会影响原来对象。
- 但是严格意义上说,我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
def ChangeInt(a):
a = 10
b = 2
ChangeInt(b)
print b # 结果还是2。
函数的参数
- 必备参数,不可不传,否则将出错
- 关键字参数,函数调用使用关键字参数来确定传入的参数值,和参数的顺序无关
def printinfo(name, age):
print "name:", name
print "age:", age
return
printinfo(age=23, name='super')
- 默认参数,在没有参数传入时,使用默认值
def printinfo(name, age=20):
print "name:", name
print "age:", age
return
printinfo(name='super')
- 不定长参数
# 函数定义方式
def funcname([formal_args,] *var_args_tuple):
function_suite
return [expression]
def printinfo(arg1, *vartuple):
print '输出:'
print arg1
for i in vartuple:
print i
return
printinfo(10)
printinfo(70,19,23,21)
- 匿名函数,使用lambda来创建匿名函数
# 匿名函数定义方式
lambda [arg1 [, arg2, ..., argn]]:expression
sum = lambda arg1, arg2: arg1 + arg2
print sum
全局变量和局部变量
arg = 10 # arg全局变量
def sum(arg1, arg2):
arg = arg1 + arg2 # arg局部变量
return arg
print arg
# python会默认任何在函数中的变量都是局部变量,若需要在函数中更改全局变量则需要加一个global
money = 100
def addMoney():
global money # 告诉Python money是一个全局变量
money = money + 100
return
print money
导入模块
在导入一个模块时,Python解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
3、如果都找不到,Python会查看默认路径,UNIX下,默认路径一般为/usr/local/lib/python。