当前位置:K88软件开发文章中心编程语言PythonPython01 → 文章内容

Python3 函数

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-10 11:00:09

35不定长参数你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:def functionname([formal_args,] *var_args_tuple ):


"函数_文档字符串" function_suite return [expression]加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。实例(Python 3.0+)


#!/usr/bin/python3


# 可写函数说明def printinfo( arg1, *vartuple ):


"打印任何传入的参数"print ("输出:


")print (arg1)print (vartuple)


# 调用printinfo 函数printinfo( 70, 60, 50 )以上实例输出结果:输出:


70(60, 50)如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:实例(Python 3.0+)


#!/usr/bin/python3


# 可写函数说明def printinfo( arg1, *vartuple ):


"打印任何传入的参数"print ("输出:


")print (arg1)for var in vartuple:


print (var)return


# 调用printinfo 函数printinfo( 10 )printinfo( 70, 60, 50 )以上实例输出结果:输出:


10输出:


706050还有一种就是参数带两个星号 **基本语法如下:def functionname([formal_args,] **var_args_dict ):


"函数_文档字符串" function_suite return [expression]加了两个星号 ** 的参数会以字典的形式导入。实例(Python 3.0+)


#!/usr/bin/python3


# 可写函数说明def printinfo( arg1, **vardict ):


"打印任何传入的参数"print ("输出:


")print (arg1)print (vardict)


# 调用printinfo 函数printinfo(1, a=2,b=3)以上实例输出结果:输出:


1{'a':


2, 'b':


3}声明函数时,参数中星号 * 可以单独出现,例如:


def f(a,b,*,c):


return a+b+c如果单独出现星号 * 后的参数必须用关键字传入。>>> def f(a,b,*,c):


... return a+b+c... >>> f(1,2,3)


# 报错Traceback (most recent call last):


File "<stdin>", line 1, in <module>TypeError:


f() takes 2 positional arguments but 3 were given>>> f(1,2,c=3)


# 正常6>>>匿名函数python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。lambda 只是一个表达式,函数体比 def 简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。语法lambda 函数的语法只包含一个语句,如下:lambda [arg1 [,arg2,.....argn]]:


expression如下实例:实例(Python 3.0+)


#!/usr/bin/python3


# 可写函数说明sum = lambda arg1, arg2:


arg1 + arg2


# 调用sum函数print ("相加后的值为 :


", sum( 10, 20 ))print ("相加后的值为 :


", sum( 20, 20 ))以上实例输出结果:相加后的值为 :


30相加后的值为 :


40return语句return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:实例(Python 3.0+)


#!/usr/bin/python3


# 可写函数说明def sum( arg1, arg2 ):





# 返回2个参数的和."total = arg1 + arg2print ("函数内 :


", total)return total


# 调用sum函数total = sum( 10, 20 )print ("函数外 :


", total)以上实例输出结果:函数内 :


30函数外 :


30变量作用域Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:L (Local) 局部作用域E (Enclosing) 闭包函数外的函数中G (Global) 全局作用域B (Built-in) 内建作用域以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。x = int(2.9)


# 内建作用域 g_count = 0


# 全局作用域def outer():


o_count = 1


# 闭包函数外的函数中 def inner():


i_count = 2


# 局部作用域Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:>>> if True:


... msg = 'I am from Runoob'... >>> msg'I am from Runoob'>>> 实例中 msg 变量定义在 if 语句块中,但外部还是可以访问的。如果将 msg 定义在函数中,则它就是局部变量,外部不能访问:>>> def test():


... msg_inner = 'I am from Runoob'... >>> msg_innerTraceback (most recent call last):


File "<stdin>", line 1, in <module>NameError:


name 'msg_inner' is not defined>>> 从报错的信息上看,说明了 msg_inner 未定义,无法使用,因为它是局部变量,只有在函数内可以使用。全局变量和局部变量定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:实例(Python 3.0+)


#!/usr/bin/python3total = 0


# 这是一个全局变量


# 可写函数说明def sum( arg1, arg2 ):





#返回2个参数的和."total = arg1 + arg2


# total在这里是局部变量.print ("函数内是局部变量 :


", total)return total


#调用sum函数sum( 10, 20 )print ("函数外是全局变量 :


", total)以上实例输出结果:函数内是局部变量 :


30函数外是全局变量 :


0global 和 nonlocal关键字 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。以下实例修改全局变量 num:实例(Python 3.0+)


#!/usr/bin/python3num = 1def fun1():


global num


# 需要使用 global 关键字声明print(num)num = 123print(num)fun1()print(num)以上实例输出结果:1123123如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:实例(Python 3.0+)


#!/usr/

上一页  [1] [2] [3]  下一页


Python3 函数