网站首页 > 文章中心 > 其它

python函数func

作者:小编 更新时间:2023-08-26 23:50:55 浏览量:3人看过

python中内置的__func__方法

__name__是python的一个内置类属性,它天生就存在于一个 python 程序中,代表对应程序名称.

在test1.py中,并运行该文件:

所以呢通过判断__name__的值,就可以区分py文件是直接被运行,还是被引入其他程序中.

python函数func-图1

from bb import *

此方式只能导入公有的属性、方法、类;无法导入以单下划线开头(protected)或以双下划线开头(private)的属性、方法、类.

由于bb.py中使用了__all__=('A','func'),所以在别的模块导入该模块时, 只能 导入__all__中的变量、方法、类;

__all__=('func','__func','_A')

放入__all__中所有属性均可导入,即使是以下划线开头.虽然_func()、__func()属于protected ,private权限的,但是如果使用__all__是可以直接导入访问的 .也就是说可以通过这种方式导入public,protected,private.

Python其实很简单 第十二章 函数与变量的作用域

在前面已经多次提到函数这个概念,之所以没有解释什么是函数,是因为程序中的函数和数学中的函数差不多,如input()、range()等都是函数,这些都是Python的标准函数,直接使用就可以了.根据需要,用户也可以自定义函数.

函数的结构:

def 函数名(参数):

python函数func-图2

函数体

return 返回值

def f(x):

return(y)

下面给出完整的程序代码:

print(res)

运行结果:11

上例中的y是函数f(x)的返回值.并不是所有的函数都有参数和返回值.如下面的函数:

def func():

print('此为无参数传递、无返回值的函数')

func()

输出结果:此为无参数传递、无返回值的函数

可以看出,该函数func()无参数,故调用时不用赋给参数值.

def f(x,y):

return z

也可以通过直接给参数列表中的参数赋值的方法,为参数添加默认值,如果用户赋予参数值,则按照用户赋值执行,否则使用默认值.例如:

回调函数,又称函数回调,是将函数作为另一函数的参数.

例如:

def func(fun,m,n):

fun(m,n)

def f_add(m,n):

print('m+n=',m+n)

def f_mult(m,n):

print('m*n=',m*n)

输出结果:

在f_add(m,n)和f_mult(m,n)被定义前,func(fun,m,n)中的fun(m,n)就已经调用了这两个函数,即"先调用后定义",这也是回调函数的特点.

如果无法预知参数的个数,可以在参数前面加上*号,这种参数实际上对应元组类型.譬如,参会的人数事先不能确定,只能根据与会人员名单输入:

def func(*names):

print('今天与会人员有:')

for name in names:

print(name)

func('张小兵','陈晓梅','李大海','王长江')

运行后,输出结果为:

今天与会人员有:

张小兵

陈晓梅

李大海

王长江

参数为字典类型,需要在参数前面加上**号.

def func(**kwargs):

for i in kwargs:

print(i,kwargs[i])

func(a='a1',b='b1',c='c1')

输出结果为:

a a1

b b1

c c1

一个有趣的实例:

def func(x,y,z,*args,**kwargs):

print(x,y,z)

print(args)

print(kwargs)

func('a','b','c','Python','is easy',py='python',j='java',ph='php')

a b c # 前三个实参赋给前三个形参

('Python', 'is easy') # *args接收元组数据

{'py': 'python', 'j': 'java', 'ph': 'php'} # **kwargs接收字典数据

变量的作用域即变量的有效范围,可分为全局变量和局部变量.

局部变量

在函数中定义的变量就是局部变量,局部变量的作用域仅限于函数内部使用.

全局变量

在主程序中定义的变量就是全局变量,但在函数中用关键字global修饰的变量也可以当做全局变量来使用.

全局变量的作用域是整个程序,也就是说,全局变量可以在整个程序中可以访问.

下面通过实例去讨论:

程序1:

a=1 # a为全局变量

def a_add():

print('a的初值:',a) # 在函数中读取a的值

a_add() # 调用函数a_add()

a+=1 # 主程序语句,a增加1

print('a现在的值是:',a) # 主程序语句,读取a的值

运行结果:

a的初值: 1

这个结果和我们想象的一样,全局变量a既可以在主程序中读取,也可以在子程序(函数)中读取.

a=1

a+=1

print('a的初值:',a)

a_add()

print('a现在的值是:',a)

运行程序1时出现如下错误提示:

UnboundLocalError: local variable 'a' referenced before assignment

意思是:局部变量'a'在赋值之前被引用.

怎样解决这个问题?

def a_add(x):

x+=1

return x

a=a_add(a)

结果的确是正确的,但在函数a_add(x)中没有调用变量a(没有出现变量a).

def a_add(a):

return a

global a

虽然使用global可使变量使用起来非常方便,但也容易引起混淆,故在使用过程中还是谨慎为好.

递归,就是函数调用它自身.递归必须设置停止条件,否则函数将无法终止,形成死循环.

以计算阶乘为例:

def func(n):

if n==1:

return 1

else:

return n*func(n-1) #func( )调用func( )

嵌套,指在函数中调用另外的函数.这是程序中常见的一种结构,在此不再赘述.

匿名函数

Python中可以在参数前加上关键字lambda定义一个匿名函数,这样的函数一般都属于"一次性"的.

程序1:这是一个常规的函数定义和调用.

def f_add(x,y):

return x+y

f_add=lambda x,y:x+y

python中函数的作用

Python 函数定义以及参数传递

①函数定义

#形如def func(args...):

以关键字def 开头,后面是函数名和参数下面是函数处理过程.

举例:

def add( a, b ):

参数可以设定默认值,如:

def add( a, b=10 ): #注意:默认值参数只会运算一次

默认值参数只会运算一次是什么意思?

def func( a, b=[] ): #b的默认值指向一个空的列表,每次不带默认值都会指向这块内存

b.append(a) return b

结果:

[1]

这下明白为什么默认参数只计算一次了吧,函数参数不传递时默认值总是指向固定的内存空间,就是第一次计算的空间.

def func(a, b):

在使用函数时可以如下方式,结果都是相同的

如果函数定义形式如下方式:

def func(*args): #这种定义会把传递的参数包成元组

print(args,type(args))

举一个和上述过程相反的例子:

def func(a,b):

print('a=%d, b=%d' % (a,b) )

总结:*号在定义函数参数时,传入函数的参数会转换成元组,如果 *号在调用时则会把元组解包成单个元素.

另一种定义:

def func(**kw):#使用**定义参数会把传入参数包装成字典dict

print(kw, type(kw) )

相反的例子:

def func(*args, **kw):#这种形式的定义代表可以接受任意类型的参数

总结:**号在定义函数参数时,传入函数的参数会转换成字典,如果 **号在调用时则会把字典解包成单个元素.

lambda表达式

lambda表达式就是一种简单的函数

add = lambda x,y: x+y

以上就是土嘎嘎小编为大家整理的python函数func相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章