导航
导航
文章目录
  1. 7.1 简介
    1. 定义函数
    2. 输出
    3. 如何工作
  2. 7.2 函数形参
    1. 使用函数形参
    2. 输出
    3. 如何工作
  3. 7.3 局部变量
    1. 使用局部变量
    2. 输出
    3. 如何工作
    4. 使用global语句
    5. 输出
    6. 如何工作
  4. 7.4 默认参数值
    1. 使用默认参数值
    2. 输出
    3. 如何工作
  5. 7.5 关键参数
    1. 使用关键参数
    2. 输出
    3. 如何工作
  6. 7.6 return语句
    1. 使用字面意义上的语句
    2. 输出
    3. 如何工作
  7. 7.7 DocStrings
    1. 使用DocStrings
    2. 如何工作

简明Python教程-7.函数

7.1 简介

1、函数是重用的程序段
2、给一块语句一个名称,然后在程序的任何地方使用这个名称任意多次地运行这个语句块,称为 调用 函数
3、函数通过 def 关键字定义
* def关键字后跟一个函数的 标识符 名称,然后跟一个圆括号
* 圆括号之中可以包括一些变量名
* 该行以冒号结尾
4、接下来是一块语句,称为 函数体

定义函数

1
2
3
4
5
6
7
#!/usr/bin/python
# Filename: function1.py

def sayHello():
print 'Hello World!' # block belonging to the function

sayHello() # call the function

输出

1
2
$ python function1.py
Hello World!

如何工作

1、定义一个称为sayHello的函数
2、此函数无参数,因此圆括号中没有声明任何变量
3、参数是给函数的输入,传递给函数不同的值,得到相应的结果

7.2 函数形参

1、函数的参数是你提供给函数的值,就像变量一样
2、参数在函数的圆括号内指定,用逗号分隔
3、调用函数时,同样以圆括号和逗号的方式提供值
4、术语:
函数中的参数称为 形参
提供给函数调用的值称为 实参

使用函数形参

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/python
# Filename: func_param.py

def printMax(a, b):
if a > b:
print a, 'is maximum'
else:
print b, 'is maximum'

printMax(3, 4) # directly give literal values

x = 5
y = 7

printMax(x, y) # give variables as arguments

输出

1
2
3
$ python func_param.py
4 is maximum
7 is maximum

如何工作

1、定义一个称为printMax的函数,该函数有两个形参,叫做a和b
2、使用if..else语句找出两者之中较大的一个,并打印
3、第一次调用将数字作为 实参 传递给函数,第二次调用中将变量作为 实参 ,两次调用printMax函数的工作完全相同

7.3 局部变量

1、在函数定义内声明的变量,与函数外具有相同名称的其他变量没有任何关系
2、变量名称对于函数来说是 局部
3、变量的 作用域 :所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始

使用局部变量

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python
# Filename: func_local.py

def func(x):
print 'x is', x
x = 2
print 'Changed local x to', x

x = 50
func(x)
print 'x is still', x

输出

1
2
3
4
$ python func_local.py
x is 50
Changed local x to 2
x is still 50

如何工作

第一个print:打印形参x的值,50
第二个print:打印局部变量x的新值,2
第三个print:打印主块中x的值,不受影响

使用global语句

1、global语句告诉Python一个变量名不是局部的,是全局的
2、使用global语句,可以为一个定义在函数外的变量赋值的功能
3、在函数内,可以直接使用定义在函数外的变量的值(如果函数内没有同名变量),但应避免这么做,因为这使得程序的读者不清楚这是在哪里定义的,使用global语句可以清楚地表明变量是在函数外的块定义的

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python
# Filename: func_global.py

def func():
global x

print 'x is', x
x = 2
print 'Changed local x to', x

x = 50
func()
print 'Value of x is', x

输出

1
2
3
4
$ python func_global.py
x is 50
Changed global x to 2
Value of x is 2

如何工作

global语句生命x是 全局 的,因此当在函数内把值赋给x的时候,这个变化也反应在主块中使用x的值的时候
可以使用global语句指定多个全局变量,如global x, y, z

7.4 默认参数值

1、对于一些函数,可能希望它的一些参数是 可选 的,当调用时不提供这些参数的值的话,就使用默认值,此功能借助默认参数值完成
2、在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值
3、默认参数值应该是一个参数,应该是不可变的

使用默认参数值

1
2
3
4
5
6
7
8
#!/usr/bin/python
# Filename: func_default.py

def say(message, times = 1):
print message * times

say('Hello')
say('World', 5)

输出

1
2
3
$ python func_default.py
Hello
WorldWorldWorldWorldWorld

如何工作

1、名为say的函数用来打印一个字符任意所需的次数
2、如果不提供值,则默认打印一遍。通过给形参times指定默认参数值1来实现此功能
3、调用:
第一次,只提供一个字符串,打印一次;
第二次,提供了字符串和参数5,打印5次
4、重要:
只有在形参表末尾的那些参数可以有默认参数值
即不能在声明函数形参的时候,先声明有默认值的形参,后声明没有默认值的形参,因为赋给形参的值是根据位置而复制的
例如,def func(a, b=5)有效,dec func(a=5, b)无效

7.5 关键参数

1、可以通过命名,来为函数的许多参数中的,一部分参数赋值,这被称作 关键参数
2、使用名字(关键字),而不是位置,来给函数指定实参
3、优势:不用担心参数顺序;可以只给想要的参数赋值

使用关键参数

1
2
3
4
5
6
7
8
9
#!/usr/bin/python
# Filename: func_key.py

def func(a, b=5, c=10):
print 'a is', a, 'and b is', b, 'and c is', c

func(3, 7)
func(25, c=24)
func(c=50, a=100)

输出

1
2
3
4
$ python func_key.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50

如何工作

1、func函数有一个没有默认值的参数,和两个有默认值的参数
2、第一次调用,func(3, 7),a=3(实参位置),b=7(实参位置),c=10(默认值)
3、第二次调用,fimc(25, c=24),a=25(实参位置),b=5(默认值),c=24(关键参数)
4、第三次调用,func(c=50, a=100),完全使用关键参数指定参数值,可以不用根据顺序来指定参数

7.6 return语句

return语句用来从一个函数 返回 ,即跳出函数
也可以从函数 返回 一个值

使用字面意义上的语句

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/python
# Filename: func_return.py

def maximum(x, y):
if x > y:
return x
else:
return y

print maximum(2, 3)

输出

1
2
$ python func_return.py
3

如何工作

1、maximum函数通过if..else语句比较出较大值,然后 返回
2、如果没有返回值的return语句,等价于return None
* None是Python中表示没有任何东西的特殊类型
3、如果不提供return语句,函数会在结尾暗含一个return None语句

7.7 DocStrings

Python有一个很奇妙的特性,称为 文档 字符串,通常被称为 docstrings
应当尽量使用DocStrings。它可以使程序文档更加简单易懂;可以在程序运行时,从函数恢复文档字符串

使用DocStrings

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# Filename: func_doc.py

def printMax(x, y):
'''Prints the maximum of two numbers.

The two values must be integers.'''
x = int(x) # convert to integers, if possible
y = int(y)

if x > y:
print x, 'is maximum'
else:
print y, 'is maximum'

printMax(3, 5)
print printMax.__doc__

如何工作

1、函数第一个逻辑行的字符串,是这个函数的 文档字符串 。另外,DocStrings也适用于 模块
2、文档字符串的惯例是一个多行字符串:
第一行:以大写字母开始,句号结尾
第二行:空行
第三行:详细的描述
强烈建议在你的函数中使用文档字符串时,遵循这个惯例
3、可以使用doc(注意双下划线),调用文档字符串属性
* Python把 每一样东西 都作为对象,包括这个函数,后面章节详细介绍
4、help()函数所做的,就是抓取函数的doc属性,然后展示
* 可以调用help(printMax)查看,按q退出help