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

python函数和变量

作者:小编 更新时间:2023-10-04 08:07:36 浏览量:256人看过

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

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

函数的结构:

def 函数名(参数):

函数体

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函数中局部变量与全局变量遵守规则

(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,如有全局同名变量,其值不变.

*<>.高等教育出版社

如何查看 Python 全部内置变量和内置函数?

如何查看 Python 全部内置变量和内置函数?

按下回车键(Enter).

import builtins

dir(builtins)

得到的结果和 dir(__builtins__) 是一样的.

可以看到,返回的结果是以 [ 开头以 ] 结尾,说明是个列表,我们看看这列表里一共有多少个元素?

输入:

len(dir(__builtins__))

for item in dir(__builtins__):

print(item)

按下两次回车键(Enter).按照默认的字母顺序,先是大写字母 A-Z,然后是下划线(_)开头的,然后是小写字母 a-z ,为什么是这个顺序?因为按照 ASCII 码表,表示小写字母的数字比表示大写字母的数字要大,而表示下划线(_)的数字居中,所以如此.

print('Hello World')

builtins.print('Hello World')

__builtins__.print('Hello World')

运行结果如下,可以看到,结果是一样的.

dir()本身就是 Python 的内置函数,利用它,我们可以查看对象的全部方法和属性,对于掌控全局,了解全貌很有用.

课程推荐:Python快速教程之从入门到精通

Python函数及变量的定义和使用

def 函数名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ?函数体? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ?

def 函数名(非可选参数,可选参数):

?函数体?

??return 返回值

def 函数名(参数,*b):

? ? ? 函数体

? ? ? return 返回值

函数名 = lambda 参数 : 表达式

例1:f = lambda x , y? :? x ◆ y? ? ? ? ? ? ? ? ? ? ? ?

调用:?print(f())? ? 输出: 没有参数的lambda函数!

python中函数中定义的变量只能在该函数题中起作用对吗

函数中定义的变量只能在函数体重起作用,Python在函数中定义的变量只能在该函数体中才可以起作用,只要出了这个函数,那么其他的地方就无法访问这个变量,因为该变量的作用域只在这个函数中,所以只在本函数体内有效.

因为定义了局部变量只能在其被声明的函数内部访问,要想在程序的全域进行访问只能通过定义全局变量的方法进行实现,这些只要在程序控制范围内都可以调用.

一般情况下变量就分为这两大类,一类是全局变量,一类是局部变量.

Python常用的控制语句:

①.、if语句,当条件成立时运行语句块.经常与else,elif(相当于else if)配合使用、for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素.

Python代码编写注意:

开发者有意让违反了缩进规则的程序不能通过编译,所以在进行Python代码的书写时一定要注意代码的缩进.

以上内容参考:百度百科-Python

Python函数和模块的定义与使用,包括变量的类型及匿名函数用法

函数是组织好,可重复使用的,用来实现相关功能的代码段

函数提高了代码的重复利用率和应用的模块性.

除Python自带的函数之外,也可以自己创建函数,叫做自定义函数

语法:

函数代码块以 def 开头

参数为 输入值 ,放于函数名后口号里面,

函数内容以冒号:开始,函数体缩进, return 返回 输出值

函数调用使用关键字参数来确定传入的参数值,此时,如果多个函数则不需要按照指定顺序.

在定义函数时,指定参数默认值.调用时如果不传入参数,则使用默认值

不定长部分如果没有指定参数,传入是一个空元组

加了 两个星号 ** 的参数会以字典的形式导入

/ 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式.

不使用 def 定义函数,没有函数名

lamdba主体时一个表达式,而不是代码块,函数体比def简单很多

定义在函数内部的为局部变量,仅能在函数内部使用

定义在函数外部的为全局变量,可在全局使用

模块是将包含所有定义的函数和变量的文件,一般将同类功能的函数组和在一起称为模块.

模块需要导入后,在调用相应函数进行使用

模块导入的方法:

从模块中导入一个指定的部分

把一个模块的所有内容全都导入

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

编辑推荐

热门文章