python基础之函数

前言

本文主要介绍函数的定义和调用、函数参数分类、函数的作用域以及常用内置函数4个模块。

一、函数定义和调用

1、语法:

def 函数名称():

  函数要执行的代码程序

 

#定义一个求和的函数
def add():
    a=3
    b=4
    print(a+b)

2、调用

函数名()

#定义一个求和的函数
def add():
    a=3
    b=4
    print(a+b)

add()

输出结果:

7

3、return的用法

  return:表示函数的返回值,返回值是函数执行完成以后,得到的计算结果。return有返回值后,函数外部若要使用该计算结果,可以使用print()函数打印出来。

def add():
    a=3
    b=4
    return a+b

print(add())

  当函数中遇到rerurn后,函数就会终止执行,如下所示:

def add():
    a=3
    b=4
    return a+b
    print("继续")

result = add()
print(result)

  输出结果:7  

可以看出return a+b下面的print("继续")这段代码是没有执行的。

  当函数中定义return时可以不带参数,但没有带参数时,返回值为None

def add():
    a=3
    b=4
    return

result = add()
print(result)

输出结果:

 

 

 二、函数参数分类及使用

  下面将介绍实际参数、形式参数、位置参数、关键字参数、默认参数、不定长参数(可变参数:不定长位置参数、不定长关键字参数)

  实际参数:函数调用时提供的参数;形式参数:函数定义时的参数。例如下面的def add(a,b)中的“a”和“b”就是形式参数,result=add(3,4)中的"3"和"4"就是实际参数。

def add(a,b):
    sum = a+b
    return sum

result = add(3,4)
print(result)

  位置参数:函数在定义的时候,若设定有形式参数,那么在函数调用时必须保持和函数定义时的参数数量和位置,否则就会抛出 TypeError 异常,并提示缺少必要的位置参数。

def add(a,b):
    print(f"a={a}")
    print(f"b={b}")
    
a=3
b=4
add(a,b)

输出结果:

 

 

 

def add(a,b):
    print(f"a={a}")
    print(f"b={b}")
    
a=3
b=4
add(b,a)

输出结果:

 

 

 

def add(a,b):
    print(f"a={a}")
    print(f"b={b}")


a=3
b=4
add(a)

输出结果:

 

 

   默认参数:函数在定义时,提供一个默认值,如:b="hello world",当定义默认值参数后,实际传参时可以不传该参数值

def add(a,b="hello world"):
    print(f"a={a}")
    print(f"b={b}")


a=3
b=4
add(a)

输出结果:

 

 

   当传递了实际参数后,设定的默认值参数“hello world”会被替换成"name"

def add(a,b="hello world"):
    print(f"a={a}")
    print(f"b={b}")


a=3
b="name"
add(a,b)

输出结果:

 

 

  关键字参数:用来标记实际参数到底是哪个变量的。不需要实际参数的位置与形式参数的位置完全一致。

def add(a,b,c):
    print(f"a={a}")
    print(f"b={b}")
    print(f"c={c}")


a=3
add(a,c="password",b="name")

输出结果:

 

 

 但需要注意的是:不管关键字参数还是默认参数,都要放到位置参数的后面。

关键字参数调用时,放在位置参数前面会报错。

def add(a,b,c):
    print(f"a={a}")
    print(f"b={b}")
    print(f"c={c}")


a=3
add(c="password",b="name",a)

输出结果:

 

 

 默认参数定义时,放在位置参数前面会报错:

def add(a,b="hello world",c):
    print(f"a={a}")
    print(f"b={b}")
    print(f"c={c}")


a=3
add(a,c="password",b="name")

 

 

  不定长参数(可变参数):不定长参数分为不定长位置参数(*args)和不定长关键字参数(**kwargs)。

不定长位置参数在函数内打印出来是一个元组,定义一个不定长位置参数*b,输入a=3,b=4,输出结果b是一个元组b =(4,)

def add(a,*b):
    print(f"a={a}")
    print(f"b={b}")
    # print(f"c={c}")

a=3
b=4
add(a,b)

输出结果:

 

 

 不定长位置参数传入多个实际参数时:

def add(a,*b):
    print(f"a={a}")
    print(f"b={b}")
    # print(f"c={c}")

a=3
b=4
add(a,b,3,4,5,6)

输出结果:

 

 

 元组拆包:定义了一个元组,在函数调用的时候,在元组的前面加一个*,就会把元组的两边括号去掉,相当于传递的参数为add(3,2,3,4)

def add(a,*b):
    print(f"a={a}")
    print(f"b={b}")
    # print(f"c={c}")

a=3
b=(2,3,4)
add(a,*b)

不定长关键字参数:接收所有的关键字参数,在函数内打印出来是一个字典

def add(a,*b,**c):
    print(f"a={a}")
    print(f"b={b}")
    print(f"c={c}")

a=3
add(a,2,3,4,x=10,y=20)

输出结果:

 

 

 字典拆包:定义了一个字典,在函数调用的时候,在字典的前面加两个**,就会把字典的两边括号去掉,相当于传递的参数是key=value形式的关键字参数。

def add(a,*b,**c):
    print(f"a={a}")
    print(f"b={b}")
    print(f"c={c}")

a=3
b=(2,3,4)
c={"x":10,"y":20}
add(a,*b,**c)

 

 

 三、函数的作用域

主要介绍全局变量和局部变量的用法。

1、定义

全局变量:在函数外定义的变量;局部变量:在函数内定义的变量。

def get_name():
    #局部变量
    name="xiaofenggou"
    print(name)

#全局变量
a="小疯狗"
print(a)
get_name()

2、全局变量可以和局部变量同名

def get_name():
    #局部变量
    name="xiaofenggou"
    print(name)

#全局变量
name="小疯狗"
print(name)
get_name()

输出结果:

 

 

 3、在函数内(局部)可以使用全局变量

def get_name():
    #局部变量
    # name="xiaofenggou"
    print(name)

#全局变量
name="小疯狗"
print(name)
get_name()

输出结果:

 

 

 4、在全局不能直接使用局部变量

def get_name():
    #局部变量
    name="xiaofenggou"
    print(name)

#全局变量
# name="小疯狗"
print(name)
get_name()

 

 

 5、函数内(局部)修改全局变量(需要声明)

def get_name():
    #局部直接使用全局变量
    name=name+"xiaofenggou"
    print(name)

#全局变量
name="小疯狗"
print(name)
get_name()

 

 

 使用global声明name是一个全局变量

def get_name():
    #声明全局变量
    global name
    name=name+"xiaofenggou"
    #打印全局变量
    print(name)

#全局变量
name="小疯狗"
print(name)
get_name()
print(name)

 

 

 四、常用内置函数

1、enumerate():用于同时获取列表的索引和元素

def get_name():
    for index,i in enumerate(name):
        print(index,i)
    print(enumerate(name))
#全局变量
name=["小疯狗",2,3]
get_name()

输出结果:

 

 

 2、eval():把字符串两边的引号去掉,同时变成可执行的python代码

def get_name():
    for index,i in enumerate(name):
        print(index,i)
    print(enumerate(name))
    #eval
    print(eval(age))
#全局变量
name=["小疯狗",2,3]
age="1+5"
get_name()

输出结果:

 

 

 eval()将字符串转为字典

def get_name():
    for index,i in enumerate(name):
        print(index,i)
    print(enumerate(name))
    #eval
    print(type(string))
    print(type(eval(string)))
#全局变量
name=["小疯狗",2,3]
string='{"name":"xiaofenggou","age":18}'
get_name()

输出结果:

 

 

3、max():求最大值;min():求最小值

4、sum():求和

5、range():创建一个列表,一般用于for循环

  如下图所示:start和step可以省略不写,都省略后取值范围[0-10),step默认值为1

def get_name():
  #range(start,end,step)
for i in range(0,10,2): print(i) get_name()

 

 

 6、id():用于获取对象在内存中的地址,用于判断两个变量是否是同一个对象

def get_name():
    print(id(string))
    print(id(string2))

string="小疯狗"
string2="小疯狗"
get_name()

输出结果

 

 

 7、zip():将可迭代对象打包成一个元组,然后可转化为列表或者字典。可以用于文件读取测试用例。

def get_name():
    print(zip(list1,list2))
    print(list(zip(list1,list2)))
    print(dict(zip(list1,list2)))

list1=["name","age","sex"]
list2=["xiaofenggou",18,""]
get_name()

输出结果:

 

posted @ 2022-08-03 19:32  小疯狗  阅读(135)  评论(0)    收藏  举报