「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。
前言
函数在前面的基础部分频繁出现,更有多次演示,多是数据类型的相关函数或是python内建函数(不需要自己定义的);这章会重点讲自己怎么写函数,即自定义函数。
函数
一个问题,什么是函数?
函数是有组织、有目的,可重复使用的,即提高代码复用率的功能代码块;关键字是def 函数名(如果有参数): Pass
自定义函数
def hello():
print("Hello World!")
hello() # 调用函数,输出内容会打印在控制台:Hello World!
print(hello())
# 会输出print的内容到控制台,同时还有一个None
- 思考一下,为啥print(函数())会有一个None?
参数传递
这里先简单介绍一下参数有哪些名词:形参、实参、默认参数、不定长参数、关键字参数、必须参数,位置参数
- 形参:就是在定义函数时的参数,如:def func(a): pass那么a就是形式参数
- 必须参数:延续上面的例子,如果调用函数func()不传参数就会报错,这时a就是必须参数
- 实参:既然不传参数会报错,那么就给个参数:func(1),这时1就是实际传入func的参数,实参
- 位置参数: 意思是调用函数时指定参数并传值,这样参数就跟定义函数时的位置没有关系了
def func(a,b):
return a+b
print(func(b=2,a=1)) # 输出:3
# 如果不使用位置参数指定入参,那么a和b的值就会不一样。
print(func(2,1)) # 这时函数内部,a=2,b=1
- 默认参数:很好理解,就是定义函数时带参数,并且给参数一个值,那么在调用时可以选择不传参也不会报错
- 不定长参数:又叫动态参数/可变参数;用于不知道函数具体要传多少参数及参数类型,一般有两种使用方式*argsb表示和**kwargs
def func(a,b,c=None,*args,**kwargs):
print("第一个参数a:"+a)
print("第二个参数b:"+b)
print("第三个参数c:"+c)
print("第四个参数args:"+args)
print("第五个参数kwargs:"+kwargs)
pass
func(a=1,c=3,b=2,*("a","v","c"),key="value1",k="value2")
变量
- 什么是变量?
在于变。即在程序运行过程中可能发生变化的量;如:a初始为0,随着程序运行最终a变成了1或非0的值,那么a就是变量;注意:a在使用中才会创建的变量,即给它分配内存空间。
- 既然说到变量,就不得不说一下局部变量跟全局变量
# 局部变量为当前代码块或循环中的变量,它不能被它以外的事务请求
>>> def func():
... a=1
... b=2
... return a+b
...
>>> func()
3
>>> print(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
# 当输入a变量时,则会报错,提示a没有被定义
-
- 全局变量
# 相反,定义在代码块以外的变量称之为全局变量,它可以在当前py模块中任意位置调用,但是不能在它未被申明之前
>>> a = 1
>>> def func(a):
... a = a+1
... return a
...
>>> func(a)
2
>>> print(a) # 函数内的a是变了,但是外面的a没有变
1
- global关键字,定义全局变量
# 如下这种情况,a不是全局变量,因为func()函数用的不是外面的a
>>> a = 1
>>> def func():
... a = 2
... return a
...
>>> func()
2
>>> print(a)
1
-
- 使用关键字global使func函数内的a成为全局变量,那么它在外面调用就应该是func所改变的a
>>> a = 1
>>> def func():
... global a
... a = 2
... return a
...
>>> func()
2
>>> print(a)
2