Python 函数
2024-01-08 02:28:36
python函数有四类,分别是:内置函数(builtin functions),标准库函数,第三方库函数,自定义函数。
内置函数:python一经运行就加载到内存的,例如有list,len,str等函数
标准库函数:需要用import语句进行导入,常见标准库有time,os等
第三方库:需要另外下载到本地的库,例如opencv库,然后用import导入
自定义函数:自己在模块里的写的函数
Python 中使用def语句创建函数,其一般的格式如下所示:
在内存里创建一块内存块来存储代码信息,即函数对象,然后将内存块的首地址给函数名称,实现变量名与函数对象的绑定。
函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的
代码,则所有调用该函数的地方都能得到体现。
使用方式:先定义函数,后调用函数
函数语法结构:
def 函数名(参数1,参数2,参数3,…): #参数相当于变量,参数可以为1个或者多个,用逗号隔开,还可以没有参数,等于无参;代码块是函数的实现,又叫函数体
‘’‘注释’‘’
函数体
return 返回的值函数调用:
函数名() ,除了用函数名来绑定函数对象之外,也可以用其他变量名来绑定函数。
函数名要能反映其意义
#定义函数
def demo():#无参数函数
#书写函数体
print('dingyihaole')
#返回结果
#调用函数,执行结果
#demo()
fun_copy=demo #fun_copy也与函数对象进行了绑定
fun_copy()
函数定义中的参数,称之为形式参数
函数调用中的参数,称之为实际参数
def demo(name):#有参数函数
#书写函数体
print(name)
#返回结果
#调用函数,执行结果
demo('din')
以上需要注意的是:
1、函数在有返回值的情况下会根据实际情况进行返回,如果函数没有返回值则返回None
2、函数即“变量”,“变量”必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名
3、我们在使用函数时,一定要明确地区分定义阶段和调用阶段
4、实参的位置和形参一一对应,不能多也不能少。
5、用形参的名字作为关键字来指定具体传递的值,则在函数调用时,前后顺序将不受影响。
# def foo():
# print('from foo')
# bar() #未定义直接用
# foo() #报错
#测试二 都已经定义并引用
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo() #正常
return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式 所谓“返回值”,就是程序中函数完成事情后,最后给调用者的结果
当return被执行,代表函数调用结束,也就是说return语句的作用之二就是结束函数的调用。
def printme(str):
"打印任何传入的字符串"
print(str)
return str #通过返回值,将相加的结果返回给调用者 函数在执行完成后,返回给调用者的结果 函数体在遇到return后就结束了,所以写在return后的代码不会执行
printme('sui')
def sums(a,b):
res=a+b;
return res #返回结果
r=sums(3,4)
print(r)
如果函数体里不写return,默认返回None。
def pr():
print(666)
print(pr()) # 先调用pr,再打印出返回值
def pr():
print(666)
return range(5)
print(pr()) # 先调用pr,再打印出返回值
变量的作用域:全局变量 局部变量
变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响
所谓起作用的范围就是,某些代码他隶属于不同的语句。例如定义了一个函数,函数体里的所有代码是属于这个函数的,因为缩进已经不同了。在函数体里的定义的变量在函数里面可以使用,但是在函数外边却用不了。
作用域为定义的模块,从定义位置开始直到模块结束。也就是说,全局变量即使没有定义在函数里边,但是在函数里边也可以使用,只是使用而已,修改的话需要作说明
全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
要在函数内修改全局变量的值,使用 global 声明一下。如果不调用函数,是不能直接调用函数内部的全局变量的
设置全局 既能够在函数内部调用,也能在外部其他地方调用
age=100
print(age, 'and id is ', id(age))
def test():
print(age, 'and id is ', id(age)) #通过ID看出来同一个变量
test()
def test2():
global age
print(age, 'and id is ', id(age))
test2()
def test4():
age=100
print(age, 'and id is ', id(age))
test4()
1 ,在函数体中声明的变量。(包括形参变量也是局部变量)。
2 ,局部变量的引用比全局变量快,优先考虑使用。这里是说,在函数或者类里面操作自己的局部变量比操作外部变量快。
3 ,如果局部变量和全局变量同名,如果对同名变量进行赋值操作,则在函数内隐藏全局变量,只使用同名的局部变量(当局部变量和全局变量的变量名字一样时,局部变量的作用域以为局部变量值为准,此时改变局部变量的值不会影响全局变量的值)
(1)局部变量,是在函数内部定义的变量
(2)局部变量使用的范围是本函数内部,其他函数以及外部访问一律无效
(3)当函数被调用是,局部变量被创建,函数调用结束时,局部变量又被释放
#设置局部 内部调用
age=900
def test1():
age=101
print(age, 'and id is ', id(age))
test1()
def number():
#定义局部变量a, b
a = 1
b = 2
print(a, b)
#调用时局部变量生效
number()
#不调用时,进行外部访问无效
# print(a, b)
#混合用法
key="设置全局变量key"
print("1、直接全局变量****"+key+"\n")
def first():
key="局部变量key"
print("2、进入first函数****"+key+"\n")
def second():
print("3、进入second函数****"+key+"\n")
def third():
global key
key="全局通用(即全局变量)global key"
print("4、进入third函数,在third函数内部,赋给key新值,且为global,引用third()后的key为"+key+"\n")
first()
second()
third()#由于我们给third()内部定义了一个global key,探测一下等下再调用third()的时候,我们的全局key会不会改变为third()中的key值。即 第一种 的结论。(当然哈,肯定是会的,证明见下一步)
print("引用third()函数后的"+key+"\n")#探测一下global key会不会影响 全局内的key(答案是会影响,因为我们第一种说过。在局部变量里面global key相当于在全局作用域里直接写一个key一样的效果。)
second()
如果不调设置的全局global 函数,后续是不会改变key全局变量值的呢
文章来源:https://blog.csdn.net/weixin_43145997/article/details/135376423
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!