【原创】Python初体验之基础篇(3)- 函数
文 | 书心
今天更新的内容是python的函数部分,该部分设计的内容包括以下内容:
- 函数定义
- 作用域
- 函数参数
- 模块
1 函数定义
python中函数定义使用关键字def,然后接函数名、参数列表,最后是一个冒号“:”,定义方式如下:
1 # 函数定义方式 2 3 def func-name(args): 4 ...
函数名和变量名一样,由数字、字母和下划线组成,不能以数字开头
1.1 函数副作用
另外一个概念就是“函数副作用”,函数副作用是指除返回值外,函数以其他任何方式所作的修改称为副作用。打印到屏幕、文件和下载网页都属于副作用。这个概念是在“函数式编程”中所产生的概念,函数式编程认为函数不应该产生任何副作用。
1.2 作用域
作用域是指程序能访问到的变量范围。在函数内部定义的变量是属于函数的局部变量,作用域是函数体,也即在函数体外是不可以访问到函数内部定义的变量的。
根据作用域的不同,变量分为局部变量和全局变量,全局变量必须使用关键字global。如 global name。
1.3 main函数
在C++、java这些语言中,必须定义main函数作为程序的入口,而在python中main并不是作为程序的入口,python代码写在文件中,可以直接编译运行。通常在程序中应该使用main函数,这样可以更轻松的反复运行程序,还可以传递输入值。函数都有此优点。
1.4 函数参数
Python采用按“引用传递”的方式。其实此处的引用传递和C++里的引用不是一个概念。C++中的引用是变量的别名,引用即代表变量本身。
1.4.1 基本内置类型参数
Python中的引用则相当于C++中的值传递方式,编译器在实参传递时,临时生成一个中间变量来指向该值,而在函数内部对变量所作的任何修改,也只是对中间变量的修改,函数结束后,原变量的值没有发生改变。在pythonV3.5.1版中,运行一下代码,观察运行结果,即可理解这一概念。
1 # 基本内置类型作参数 2 3 def changeVal(var): 4 try: 5 var = int(var) + 10 6 except: 7 print("Error") 8 >>> a = 10 9 >>> changeVal(a) 10 >>> a 11 10
从输出结果可以看到,传入的参数在函数内的修改,实际并没有更改变量实际指向的值。
1.4.2 复杂类型参数
对于list等这类的参数,参数按引用方式传递,函数内部生成一个中间变量指向该变量。而这类变量是可变的,因此修改就是对变量本身做的更改。下面的代码即可验证。
1 # 复杂类型做函数参数 2 3 def changeListVal(lst): 4 try: 5 lst[0] = 100 6 except: 7 print("Error") 8 9 >>> lst = [10, 20] 10 >>> changeListVal(lst) 11 >>> lst 12 [100, 20]
在python中参数也可以有默认值,该用法和C++中类似。在以下的例子中简单举例说明函数参数默认值。
1 # 带默认值的函数参数 2 3 def greeting(name, greetstr="Hello"): 4 print(greetstr, name+'!') 5 6 >>> greeting(‘Bob’) 7 Hello Bob! 8 >>>greeting(‘Bob’, ‘HELLO’) 9 HELLO Bob!
2 模块
模块是指一个.py文件中所有的函数及语句。模块中通常没有main函数,而由函数组成的一个工具箱,用于其它程序方便调用。
模块的另外一个重要作用是它形成一个名称空间,名称空间基本就是一组独特的变量名和函数名。要让外面的函数可以调用模块内的函数,必须使用import语句。
由于有了名字空间,不同模块之间就可以定义相同的函数而不会导致名字冲突。
3 总结
本章讲述的是python函数的基本内容,后续再对函数做更进一步的深入研究和学习, 如图3-1。

图3-1 本章基本知识点
浙公网安备 33010602011771号