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() #正常
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)
def pr():
print(666)
print(pr()) # 先调用pr,再打印出返回值
def pr():
print(666)
return range(5)
print(pr()) # 先调用pr,再打印出返回值
变量的作用域:全局变量 局部变量
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()
#设置局部 内部调用
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()