1. 函数的引用:
和大多数编程语言一样,python函数的主要作用就是打包代码。我们将代码打包起来有两个显著的好处,第一,就是能够最大程度实现代码的重复使用减少冗余的代码。第二,就是将降低代码结构的复杂度,将各个功能分块封装,增加代码的可读性。
一个函数对应一个功能,就比如我们熟悉的BIF函数就是Python为我们预先准备好的函数。比如print()函数是用来打印信息,input()函数是用来接收用户的输入。
2. 函数的定义:
-
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
-
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
-
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
-
函数内容以冒号起始,并且缩进。
-
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
根据代码需要可以选择性添加参数和return返回值。
语法:
def 函数名(参数):
"函数文档字符串"
代码1
代码2
......
return 表达式
现在我们创建一个函数名为demo,无参数和返回值,代码块中的pass代表一个占位符,表示当前我们只是创建了这个函数,但未给函数赋能。相当于现在的demo就是一个毛坯房,里面啥都没有。
def demo():
pass
3. 函数的调用:
函数作为一个被封装的代码块需要调用才能使用。不同的需求参数可有可无,根据你自己定义的函数判断是否需要传递参数,如果你定义的函数中有参数,你就必须将参数传递进去,如果你定义的函数没有参数,那么你就不必传入参数进入。
语法:
函数名(参数)
举例:
# 不带参数的函数
def demo1():
print('我是demo1函数')
# 带参数的函数
def demo2(name):
print(f"我是{name}函数")
demo1()
demo2("demo2") # 这里别忘记加引号啦!!!
4. 函数参数的作用:
4.1 必备参数:
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用demo()函数,你必须传入一个参数,不然会出现语法错误。
现在我们实现一个需求:完成两个数的的加法运算。
# 定义函数的同时定义了接收用户数据的参数a和b
def demo(a, b):
result = a + b
print(result)
# 调用函数时传入真实数据10和20
demo(10, 20)
4.2 关键字参数:
关键字参数不需要一定按照正确的顺序进行传入参数,只需要保证关键字对应即可。
现在我们实现一个需求:输出一个人的姓名和年龄
# 定义函数的同时定义了接受用户传入的参数name和age
def demo(name,age):
print(f'我是{name},我今年{age}岁了!!!')
demo(age=18,name="张三")
Python自定义函数中有两种不定长参数,第一种是*XXX,在传递额外的参数时可以不指定参数名,直接传入参数即可,返回的是一个元组。第二种是(**XXX),这种类型的返回的是一个字典,传入时需要指定参数名。
# 传递一个参数
def demo(name):
print(f"我是{name}")
# 第一种 *XXX
def demo1(*args):
print(args)
# 第二种 **XXX
def demo2(**kwargs):
print(kwargs)
demo('张三')
demo1(1, 2, 3, 4, 5)
demo2(name="张三", age=18, love="篮球")
这边需要注意的是:当参数的传递中这三种类型参数都存在时,第一种必须在最前面,不然就会造成前两种把数据都拿走了,最后一个参数没有数据
举个例子:
def demo(num,*args,**kwargs):
print(num)
print(args)
print(kwargs)
demo(1,2,3,4,5,a=1,b=2)
def demo(*args,num,**kwargs):
print(num)
print(args)
print(kwargs)
demo(1,2,3,4,5,a=1,b=2)
如果说实在想用这个,又怕出现红色报错的话,那么我们就可以采用上面的关键字参数解决问题啦。
def demo(*args, num, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1, 2, 3, 4, num=5, a=1, b=2)
5. 函数的返回值:
在python中的返回值的与C语言的返回值类似,只是python返回的参数类型不唯一,不像C语言只能返回与函数类型相同的返回值。
def demo(a, b):
print(f"函数内部的----{a}+{b}={a+b}")
return a+b
c = demo(2,3)
print(f"函数外部的-----{c}")
我们在这里定义一个demo函数,并在其定义形参a和b,我们将demo中传递实参2和3并将返回的结果赋值给c。
6. 函数的作用域:
所谓的作用域,就是当前函数的一个作用范围,就相当于咱们学过的自变量的取值范围一样。
6.1 局部变量:
所谓的局部变量,就是在一个函数中所定义的变量只能在这个函数中使用,不能给其他函数使用,若别的函数中出现了和该局部变量函数名一样的变量,那么默认这个函数变量是一个新的变量,只是名字相同罢了。
我们可以发现我们调用函数将num输出出来了,但是我们在demo函数外部输出num时发生报错(当前变量num并没有定义),因此我们可以发现函数内部可以调用自己的函数,但是函数外部就不能调用啦,所以说自己的就是自己的嘛。
6.2 全局变量:
所谓的全局变量就是为了解决“自己的就是自己的这一个问题”。就好比你现在要给一个基金投资,然后人家就会让你把你的钱投资进去,在这个过程中你的钱也会发生变化,但也还是你的钱。
使用全局变量,我们采用的是global进行一次声明,让python解释器知道这是一个全局变量。
def demo1():
global num
num = 10
print(f"我是全局变量num,我的值是:{num}")
demo1()
print(f"调用demo1中的变量num,它的值为{num}")
以上是我对函数初步学习的一个总结,如果上面内容存在问题,希望大家能够指出,我们共同学习进步!!!