Python函数基础;

109 阅读7分钟

函数: 1.内置函数(系统自带,比如input,id,type等)。 2.用户自定义函数。

1.自定义函数

1.语法:       
    def 函数名():
        函数体;
2.函数的调用: 函数名()
    
代码示例:
def func():
    for i in range(1,5):
        print()   #  这里打的是一个换行符
        for j in range(1,i+1):
            print("*",end="")
func()

2.参数的定义

参数:函数名后面的括号中定义。

3.形参和实参

定义的参数称为:形参
调用实际的传递为:实参

形参的三种类型:
1 必需参数(必备参数) 
    代码示例:
    def func(a,b,c):   # 必备参数定义了,调用函数时就必须要传
        d = a + b +c
        print(d)
        
2 默认参数(缺省参数):
    def student_info(name,age,course = "python"):  # 调用函数时,默认参数的值如果没有传入,则被认为是默认值
    print("名字:",name)
    print("年龄:",age)
    print("学科:",course)
    注意:与必需参数混合使用时必须在末尾。
    
3 不定长参数(动态参数):
    *args: 接收0个或多个位置参数(这个参数名不一定起args,你也可以起其他名,只是args是我们不定长参数的规范写法(强烈建议就用args)。
        def func(a,b=2,*args):
            print(args) #元组方式传参
        func(5,4,3,2,1)
    **kwarge: 接收0个或多个关键字参数。
        def func(a,b=2,**kwargs):
            print(kwargs) #字典方式传参
        func(5,4,c=3,d=2,f=1)
    注意:与必须参数,默认参数一起使用时,不定长参数必须在末尾,且关键字参数不能有冲突。

4.函数的返回值 return

疑问: 为什么用return? 什么时候用return?
根据需求,当需要返回时就返回,不需要返回就不要返回。

注意点:
1 return 是用来给函数返回结果的
2 当一个函数中只会执行一次return,函数执行到return之后就不会再执行,会直接跳出函数
3 函数没有定义return,默认的就是返回None
4 返回值个数=0: 返回None
5 返回值个数=1: 返回object
6 返回值个数>1: 返回元组tuple
注:所以当函数中没有return时,print打印调用函数时返还一个None。

5.拆包与打包

1.拆包:
    代码示例:
    li = [1,2,3]
    tu = (11,22,33)
    dic = {"a":"111","b":"222","c":"999"}

    def func(a,b,c):
        print("a的值:{}".format(a))
        print("b的值:{}".format(b))
        print("c的值:{}".format(c))

    func(li[0],li[1],li[2])  # 第一种传参法
    func(*li)    # 第二种传参法 
    func(*tu)    # 元组传参
    func(**dic)  # 字典传参

2.打包:
    定义参数时候在参数前面,加个*或者**,那么这个参数就是一个不定长参数
    带有一个*不定长参数,会将接收到的参数,打包成一个元组
    带有两个或上**的不定长参数,会将接收到的参数,打包成一个字典

6.函数的作用域

1.全局变量:
  函数外部定义的变量;不管函数内部还是函数外部都能够访问
2.局部变量:
  在函数内部定义的变量,仅限函数内部可以使用,在函数外无法调用

    代码示例:
    y = 2023   # 全局变量
    def func():
        a = 100        # 局部变量
        print(a)       # 函数内部定义的变量,在函数内部是可以使用的
        print(y)       # 函数内部,可以使用全局变量    
    print(a)           # 在函数外部调用局部变量a会报错

3.在函数内部修改全局变量的值:global
    代码示例:
    a = 111
    def func():
        global a  # 这里使用global 声明某个变量之后,那么这个变量在函数内进行的操作会对全局生效
        a = 222
    func() #调用
    print(a)

注意点:
   1 不同的函数,可以定义相同名字的局部变量
   2 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储

7.常用的一些内置函数

1.最大值:max(),最小值:min(),求和:sum()。
    代码示例:
    li = [1,2,3,4,5,6,7]
    res = max(li)    # 获取列表中的最大值
    print("最大值:",res)
    res = min(li)     # 获取列表中的最小值
    print("最小值;",res)
    res = sum(li)     # 求列表中的数据总和
    print("数据总和:",res)

2.enumerate:获取每一个元素及下标。
    代码示例:
    li = [1,2,3,4,5,6,7]
    res = enumerate(li)  # 返回一个enumerate类型的数据,enumerate支持数据类型包括字符串,元组,字典。
    for i in res:   # 采用for循环遍历,获取元素的下标及其对应的值
        print(i)

3. eval:识别字符串中有效的python表达式(通俗 一点理解,就是把字符串左右两边引号去掉)。
    代码示例:
    str1 = "{'a':11,'b':22}"
    str2 = "[11,22,33,44]"
    # 需求:把str1转换成字典,str2转换成列表
    dic1 = eval(str1)
    print(dic1,type(dic1))

    li = eval(str2)
    print(li,type(li))
    
4.zip:聚合打包(打包时,以最短的为标准进行匹配打包,长的去掉)。
    代码示例:
    li = [1,2,3,4]
    li2 = [11,22,33,44]
    res = zip(li,li2)   # 将li,li2聚合打包
    print(list(res))    # 采用list(tuple,dict)转换成列表后输出
    
5.filter过滤器。
表现语法形式: filter(function,iterable)
第一个参数:
第二个参数:iterable :可迭代对像(就是可以使用for循环进行遍历的都是可迭代对像,字符串,列表,元组,字典,range)
原理:filter会将第二个参数中的数据,进行遍历,然后当成参数传入第一个参数(函数),根据函数返回的结果是否为True,来决定是否要将数据过滤出来
    代码示例:
    li = [1,2,3,4,5]
    def func():
       return a > 2 #这里必须用return,因为必须有返回值才能过滤。
    res = filter(func,li)
    print(res)
        
6.map():会根据提供的函数对指定序列做映射。
语法:map(function, iterable)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
    代码示例:
    li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    def func(a):
        return a^2
    res = map(func,li)
    print(list(res))
    
7.strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
方法语法:str.strip([chars]);
返回值:返回移除字符串头尾指定的字符序列生成的新字符串。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
    代码示例:
    str = "************this is  ***********string***example...ok***"
    print(str.strip("*")) # 指定删除字符串中的*

    str = "00000000python0000java0000"
    print(str.strip("0"))
    str2 = "     python    "
    print(str2.strip())

8.匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
在python中,不通过def来声明函数名字,而是通过 lambda 关键字来定义的函数称为匿名函数。
lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值.
lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象。
语法:lambda 参数:表达式
使用场景:
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或是返回值)
2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
    代码示例:
    def sum_func(a, b, c):
        return a + b + c
    # 将匿名函数对象赋值给 sum_lambda
    sum_lambda = lambda a, b, c : a + b + c
    print(sum_func(1, 2, 3))  # 6
    print(sum_lambda(1, 2, 3))  # 6