Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
函数的定义
定义方式
在Python中定义一个函数使用关键字def
,后跟函数名称和括号,其中括号内可以定义函数的参数。函数代码块以冒号起始,并且缩进。如下面的示例:
def function_name(parameters):
"""docstring"""
function_body
参数
函数可以带上参数,多个参数使用英文逗号隔开,参数必须在圆括号内指定。参数可以是必需的,也可以是可选的。可选参数通常指定默认值。例如:
def greet(name, msg="Good morning!"):
"""
This function greets to the person with the provided message.
If message is not provided, it defaults to "Good morning!"
"""
print("Hello", name + ',' , msg)
在上述代码中,name
是必需的参数,msg
是可选参数。如果调用时不传递 msg
参数,默认就会使用 Good morning!
作为 msg
的值。
作用域
Python的作用域规则为L(local),E(enclosing),G(global),B(built-in)。也称作LEGB规则。
- L(local):最内层,变量在此作用域仅能被此作用域(当前函数)内的代码所使用
- E(enclosing):比L上一层,统计变量在此作用域与外层作用域(例如,当前函数的外一层函数)内都可以被此处的代码所使用
- G(global):全局变量,变量在此作用域可被代码中的任意部分使用,无论当前的代码执行在哪个作用域内
- B(built-in):Python内建变量,任何Python程序都能访问
举个例子:
total = 0 # 全局变量
def sum(arg1, arg2):
# 返回2个参数的和."
total = arg1 + arg2 # total在此处是局部变量.
print("函数内 total : ", total)
return total
# 调用sum函数
sum(10, 20)
print("函数外总数 : ", total)
在上面的例子中,total
是全局变量,sum
函数中 total
为局部变量。执行 sum 函数后,函数内部的 total
会先被输出,然后在函数外部输出全局的 total
。输出结果如下:
函数内 total : 30
函数外总数 : 0
递归
递归函数意味着函数调用自身。这样程序就可以使用相同的函数来处理任意多的深度。递归的好处是它允许定义问题的解决方案,而不必考虑如何实现这些方案。递归函数至少应该有一个结束条件,否则它们将循环无限次,直到Python解释器的最大递归深度被超过为止。
下面的例子,使用递归方式求阶乘:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5))
重载
Python不支持函数重载,函数名具有唯一性,如果需要不同参数的函数有相同的函数名,则可以通过为这些函数使用不同的参数和方法数的组合来实现。
函数的使用实例
获取最大值函数
def find_max_num(data_list):
"""
获取列表中的最大数
"""
max_num = data_list[0]
for num in data_list:
if num > max_num:
max_num = num
return max_num
上述函数接收一个列表参数,返回列表中最大的数。
求平均数函数
def calc_average(data_list):
"""
计算一个列表中所有数的平均值
"""
total = sum(data_list)
return total / len(data_list)
上述函数接收一个列表参数,返回列表中所有数的平均值。
至此,“Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】”攻略完整结束。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】 - Python技术站