函数与内置函数(一)

251 阅读3分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。

前言

函数在前面的基础部分频繁出现,更有多次演示,多是数据类型的相关函数或是python内建函数(不需要自己定义的);这章会重点讲自己怎么写函数,即自定义函数。

image.png

函数

一个问题,什么是函数?

函数是有组织、有目的,可重复使用的,即提高代码复用率的功能代码块;关键字是def 函数名(如果有参数): Pass

image.png

自定义函数


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