函数及相关操作

一、函数的创建和调用

1、什么是函数

  • 函数就是执行特定任务和完成特定功能的一段代码

2、函数创建格式

def sum(a,b): #a,b称为形式参数,简称形参,形参的位置是在函数的定义处
    c=a+b
    return c

result=sum(10,60)  #10,60称为实际参数的值,简称实参,实参的位置是函数的调用处
print(result)

运算结果:

70

3、函数调用的参数传递

  • 位置实参——根据形参对应的位置进行实参传递
  • 关键字实参——根据形参名称进行实参传递

4、在函数的调用过程中,进行参数的传递。如果是不可变对象,在函数体的修改不会影响实参的值;如果是可变对象,在函数体中的修改会影响带实参的值

n1=10
n2=['hello','world']
test(n1,n2)
print(n1)  #10 可以发现n1的值没有发生改变,因为n1是不可变对象
print(n2)  #['hello', 'world', 10]  可以发现n2发生了变化,因为n2是可变对象

二、函数的返回值

1、如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】,return可以省略

2、函数的返回值,如果是1个,直接返回类型

3、函数的返回值,如果是多个,返回的结果为元组

#判断基数与偶数
odd=[]
even=[]
def fun(lst):
    for i in lst:
        if i%2==0:
            even.append(i)
        else:
            odd.append(i)
    return odd,even

lst=[10,29,34,23,44,53,55]
print(fun(lst))  #可以发现已元组的形式输出

三、函数参数定义

1、函数定义默认值参数——函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参

def fun(a,b=20):
    print(a,b)

#函数的调用
fun(100)     #100 20(在这里可以发现,只传入一个参数第二个参数使用默认值)
fun(100,200) #100 200

2、个数可变的位置参数

  • 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
  • 使用*定义个数可变的位置形参
  • 结果为一个元组
def fun(*args):   #函数定义时的可变的位置参数
    print(args)

#结果以元组的形式返回
fun(10)
fun(100,200)
fun(30,40,50)

运算结果:

(10,)
(100, 200)
(30, 40, 50)

3、个数可变的关键字形参

  • 定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
  • 使用**定义个数可变的关键字形参
  • 结果为一个字典
def fun(*args):  #函数定义时的可变的位置参数,结果为一个元组
    print(args)

fun(10)
fun(10,30)
fun(30,405,50)

def fun1(**args):  ##函数定义时的可变的关键字参数,结果为一个字典
    print(args)

fun1(a=10)
fun1(a=10,b=20)

'''
def fun2(*args,*a):
    pass
可以发现报错:个数可变的位置参数只能有一个;同理,个数可变的关键字参数也只能有一个
在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求是个数可变的位置形参放在个数可变的关键字形参之前
'''

4、函数的调用

将列表中的每个元素都转换为位置实参——使用*

将字典中的每个键值对都转换为关键字实参——使用**

def fun(a,b,c):#sa,b,c在函数的定义处,所以只是形式参数
    print('a=',a)
    print('b=',b)
    print('c=',c)

'''
函数的调用
'''
fun(10,20,30)#函数调用时的参数传递,称为位置传参
lst=[10,20,30]
#fun(lst)#不能直接把lst列表传入函数中,因为lst相当于是一个对象
fun(*lst)#在函数调用中,使用*可以将列表中的每个元素都转换为位置实参传入

print('______________________')
fun(a=100,c=300,b=200)
dic={'a':111,'b':222,'c':333}
#fun(dic)#报错,dic只是一个对象,需要添加**将字典里面数据转化为关键字实参
fun(**dic) #在函数调用时,将字典中的键值对都转化为关键字实参传入

5、函数的定义

def fun(a,b=10): #b是在函数的定义处,所以b是形参,而且进行了赋值,所以b称为默认值形参
    print(a)
    print(b)

def fun2(*args): #个数可变的位置形参
    print(args)

def fun3(**args2):#个数可变的关键字形参
    print(args2)

fun2(10,20,30,40)   #元组
fun3(a=10,b=20,c=30)#字典

def fun4(a,b,c,d):
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)

#调用fun4函数
fun4(10,20,30,40)#位置实参传递
fun4(a=10,b=20,c=30,d=40)#关键字实参传递
fun4(10,20,c=30,d=40)#前两个参数采用位置实参传递,后两个参数采用关键字实参传递
'''
如果只想c,d采用关键字实参传递,这需要在创建函数的时候在c,d前加一个*
def fun4(a,b,*,c,d):
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)
'''

四、函数变量

局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明会变成全局变量

全局变量:在函数体外定义的变量,可作用于函数内外

def fun(a,b):
    c=a+b
    print(c)

#print(a)  可以发现报错,因为 a c 都是局部变量
#print(c)

name='杨老师' #name的作用范围为函数内部和外部都可以使用——全局变量
print(name)

def fun2():
    print(name)
fun2()

def fun3():
    global age#使用global声明变量,可以使得局部变量变为全局变量
    age=20
    print(age)
fun3()

print(age)#报错,age是局部变量

运行结果:

杨老师
杨老师
20
20

  

原文地址:https://www.cnblogs.com/xiaoqing-ing/p/14987077.html