函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。也可以自己创建函数,这被叫做用户自定义函数。
自定义函数语法:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
最简单的一个例子:
def printstr(str):
print(str);
return;
printstr("测试一下")
定义了一个输出字符串的函数,结果输出为“测试一下”。
看博客里面说:“所有参数(自变量)在Python里都是按引用传递“。然后我就以c++程序猿的思维,写了一个 a\b交换的例子,既然不是值传递,那么a.b应该可以直接交换吧?
def changeab(a,b):
temp = a;
a = b;
b = temp;
print "函数内输出a、b分别为:%d,%d"%(a,b);
return;
a = 2;
b = 3;
changeab(a,b);
print "函数外输出a、b分别为:%d,%d"%(a,b);
可惜输出结果是:
函数内输出a、b分别为:3,2
函数外输出a、b分别为:2,3
这不还是值传递嘛!后来看到 一个博客写的很详细,这里就不细说了,直接给出他得出的结论:
结论:python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
想一想挺有道理的,不过再转念想想,这和C++的本质也差不到哪里去,不过方便是方便了一些。
函数参数:
必备参数:
关键字参数:有意思,只要有关键字匹配,可以不考虑参数的顺序。不过写久了c++也不会闲的蛋疼去故意改传参数的顺序把...
缺省参数:传入默认值。
不定常参数:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
匿名函数:python 使用 lambda 来创建匿名函数。主体是表达式。
python模块:
模块让你能够有逻辑地组织你的Python代码段。
把相关的代码分配到一个 模块里能让你的代码更好用,更易懂。
模块也是Python对象,具有随机的名字属性用来绑定或引用。
简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。
1、import语句:可以导入.py文件。这样就能使用.py文件中定义与实现的函数了。2、from...import 导入一个模块中指定的部分。并不全部导入模块。
3、要全部导入,可以from...import*;
python中的包:
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。
__init__.py:这个文件的作用是把整个目录中的.py文件导入进来,这样再使用这个目录下的一些函数的时候,就只需要导入__init__.py文件即可。