天天看点

【python 基础篇 十】python函数的基础使用

作者:烦人的星辰

1.函数的概念

概念

写了一段代码实现了某个小功能;然后把这些代码集中到一块,起一个名字,下一次就可以根据这个名字再次使用这个代码,这就是函数。

作用

  1. 方便代码的重复使用。
  2. 分解任务,简化程序逻辑
  3. 使代码更加模块化

函数分类

  1. 内建函数
  2. 三方函数
  3. 自定义函数

2.函数的基本使用

1.简单定义

def 函数名():

函数体

2.函数调用

函数名()

#函数的定义
def test():
    print(2**2)
    print(2**3)
    print(2**4)
    
#函数的调用  
test()#输出4 8 16           

3.函数的参数

3.1 单个参数

场景

需要动态的调整函数体中某一个处理信息时,则可以以参数的形式接收到相关数据。

定义

def 函数名(参数名称):

函数体:函数体中,可以直接以变量的方式使用该参数

函数的调用

函数名(参数值)

形参和实参的概念

上述函数定义中,参数名称 即为形参 ,在调用函数的时候,传递的真实数据,即为实参。

#单个参数的函数的定义
def test(num):
    print(num**2)
#函数的调用
test(3)#输出 9
test(4)#输出 16           

3.2 多个参数

场景

需要动态的调整函数体中多个处理信息使,则可以用逗号做分割,接收多个参数。

定义

def 函数名(参数名称1,参数名称2,........):

函数体:函数体中,可以直接以变量的方式使用该参数

函数的调用

函数名(参数1,参数2,.....)

函数名(参数名称1=参数1,参数名称2=参数2,....) 可以指明形参名称,称为 “关键字参数” 。不需要严格按照顺序

#多个参数的函数的定义
def test(num1,num2):
    print(num1+num2)
#函数的调用
test(3,4)#输出 7
test(8,16)#输出 24
test(num2 = 18,num1 = 54)#输出 72           

3.3 不定长参数

场景

如果函数体中,需要处理的数据,不确定长度,则可以使用不定长参数的方式接收数据。

定义

方式一

  1. def 函数名(*args):
  2. *args:接收的参数组成一个元组
  3. 函数体:函数体中,可以直接以元组变量的方式使用该参数
  4. 函数使用:函数名(参数1,参数2,参数3,.....)

方式二

  1. def 函数名(**args):
  2. args:**接收的参数组成一个字典
  3. 函数体:函数体中,可以直接以元组变量的方式使用该参数
  4. 函数使用:函数名(参数名称1=参数1,参数名称2 = 参数2,参数名称3 = 参数3,.....)

参数拆包

装包:把传递的参数,包装成一个集合,称之为“装包”

拆包:把集合参数,再次分解成单独的个体,称之为“拆包”

#不定长参数的函数的定义  *args  元组
def mySum(*t):
    print(t,type(t))
    result = 0
    for v in t:
        result += v
    print(result)
#函数的调用
mySum(3,4,5,6,7)#输出 (3, 4, 5, 6, 7) <class 'tuple'>   25
mySum(3,8,5,12,7)#输出 (3, 8, 5, 12, 7) <class 'tuple'>  35


#不定长参数的函数的定义  **args   字典
def mySum(**kwargs):
    print(kwargs,type(kwargs))
#函数的调用
mySum(name ="sz",age = 12)#输出 {'name': 'sz', 'age': 12} <class 'dict'>


#参数的拆包和装包  *args
def mySum(a,b,c,d):
    print(a+b+c+d)
def test(*args):
    print(args)
    #拆包操作
    mySum(args)#报错,b,c,d三个没有赋值成功
    mySum(args[0],args[1],args[2],args[3])#这样太繁琐
    mySum(*args)#这样直接把已经装包的参数,再次拆包后赋值。
test(1,2,3,4)#输出 (1, 2, 3, 4) 10 10

#参数的拆包和装包  **args  
def mySum(a,b):
    print(a)
    print(b)
def test(**args):
    print(args)
    #拆包操作
    mySum(**args)
test(a=1,b=2)#输出 {'a': 1, 'b': 2} 1,2
test(a=1,c=2)#输出 报错 因为字典拆包是拆成 a=1,c=2 这样mySum函数中的参数没有c           

3.4 缺省参数

场景

当我们使用一个函数的时候,如果大多数情况下,使用的某个数据是一个固定值,则可以使用默认值,这种参数,称为“缺省参数”

定义

def 函数名(变量名1=默认值,变量名2=默认值,........):

函数体:函数体中,即使外界没有传递指定变量,也可以使用,只不过值是给定的默认值

函数的调用

函数名(变量1,变量2,.....) 此次如果是缺省参数,则可以不填写

#缺省参数,当没有参数时,会使用默认值
def hit(somebody = "豆豆"):
        print("我想打",somebody)
hit("zhangsan")#输出我想打 zhangsan 
hit()#输出我想打 豆豆           

3.5 参数注意

值传递和引用传递

值传递:是指传递过来的,是一个数据的副本,修改副本,对原件没有任何影响

引用传递:是指传递过来的,是一个变量的地址,通过地址,可以操作用一份原件。

在python当中,只有引用传递(地址传递),但是如果数据类型是可变的数据类型,则可以改变原件,如果数据类型是不可变类型,则不可以改变原件。

def change(num):
print(id(num))#140706432668744
b = 10
print(id(b))#140706432668744
change(b)
#此时b和num同时指向一个地址值,c c++ java三个语言是对于num创建一个新地址存放10


def change(num):
 print(id(num))#140706434962504
 num = 666
 print(id(num))#2095039032144
b = 10
print(id(b))#140706434962504
change(b)
#此时因为num发生了改变,所以创建了一个新地址来存放num的改变,b没有发生改变           

4.函数的返回值

场景

当我们通过某个函数,处理好数据之后,想要拿到处理的结果

语法

def 函数名(参数等):

函数体

return 数据

注意事项

  • return后续代码不会被执行
  • 只能返回一次
  • 如果想要返回多个数据,可先把多个数据包装成一个集合,整体返回。如列表,元组,字典等等。