Day10函数基础

函数基础

一,函数的定义

1.函数的概念(什么是函数)

函数就是实现某一特定功能的代码的封装。
(函数就是把实现某一个功能的代码打成一个包,以后再需要这段代码对应的功能的时候不需要再写这段代码,而是直接调用封装这段的函数)

2. 函数分类(根据函数是谁创建的)

1)系统函数(别人造好机器) - Python自带的函数,例如:print、input、type、max、min、sorted等
2)自定义函数(自己造的机器) - 由程序员自己创建的函数

3.定义函数/创建函数

语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - 关键字;固定写法
函数名 - 由程序员自己名,但是必须符号命名要求和规范
要求:是标识符;不能是关键字
规范: 见名知义(看到函数名就大概知道这个函数对应的功能是什么);
字母都小写多个单词用下划线隔开;
使用系统的函数名、类名、模块名
(): - 固定写法
形参列表 - 以’变量名1,变量名2,变量名3,…'的形式存在,这儿的变量名可以有也可以
没有
形参的作用: 将函数外部的数据传递到函数里面
怎么确定形参: 看实现函数的功能需不需要额外的数据,需要几个
(在函数体中就把形参当成对应的数据来使用)
函数说明文档 - 本质就是一个多行注释,用来描述函数的功能和使用方法
函数体 - 结构上:和def保持一个缩进的一条或者多条语句(至少一条)
逻辑上:函数体就是实现函数功能的代码

4. 函数的调用 - 使用机器

1) 定义函数不会执行函数体, 调用函数才会执行函数体
2) 怎么调用函数
语法:
函数名(实参列表)
说明:
a.函数名 - 需要哪个函数的功能就调用哪个函数,就写哪个函数的函数名
(注意:函数名必须是已经定义好的函数的函数名)
b.() - 固定写法
c.实参列表 - 以’数据1, 数据2, 数据3,…'的形式存在
实参就是通过形参从函数外部传递到函数内部具体的数据 (实参是用来给形参赋值)
3) 函数调用过程
当代码指向到函数调用语句的时候:
第一步:先回到函数定义的位置
第二步:传参(用实参给形参赋值)
第三步:执行函数体
第四步:确定函数返回值
第五步:回到函数调用的位置接着往后执行

二,函数的返回值

1. 返回值

返回值就是从函数内部传递到函数外部的数据
1)怎么将确定函数返回值(怎么将指定的数据作为函数返回值)
看执行函数体的时候有没有遇到return,如果遇到return,return后面的值就是函数的返回值; 如果没有遇到return,返回值是None
2)怎么获取函数返回值
获取函数调用表达式的值就是获取函数的返回值。
(每个函数调用表达式都是有结果,结果是返回值;所以函数的返回值能做的事情,函数调用都可以做)
函数调用表达式:调用函数的语句
3)什么时候需要返回值
如果实现函数的功能产生了新的数据,我们就应该将新的数据返回
原因:每次调用函数的时候,系统会自动为这个函数创建一个临时的栈区域,用来保存在函数中产生的数据(形参也是保存在这个里面的),
当函数调用结束的时候系统会自动释放这块内存(内存中的数据会被删除),只有返回值不会直接删除

2.return

return在函数中有两个作用:
1)返回返回值 - 谁在return的后面,谁就是返回值
2)提前结束函数 - 执行函数体的时候如果return,函数直接结束

三,函数的参数

1. 位置参数和关键字参数 - 根据实参传递方式分类

1)位置参数: 以’实参1,实参2,实参3,…'的形式存在,通过位置一一对应的方式来给形参赋值
2)关键字参数:以’形参1=实参1, 形参2=实参2, …'的形式存在,直接用=来确定实参和形参的对应关系
注意:位置参数和关键字参数可以混用,混用的时候位置参数必须在关键字参数的前面

2. 参数默认值 - 形参

定义函数的时候,可以通过 ‘形参名=值’ 的方式给参数赋默认值; 如果一个形参有默认值,那么在调用函数的时候这个形参可以不用赋值。
注意:定义函数的时候,如果有的参数有默认值有的参数没有,那么没有默认值的参数必须放在有默认值参数的前面

3. 参数类型说明 - 定义函数的时候指定参数类型

参数类型说明既可以提示使用者在调用函数的时候该传什么类型的数据;又可以让参数在函数体中使用的时候有代码提示。
1)方法1-没有默认值的参数: 形参名:类型名
2)方法2:给参数赋默认值,默认值的类型就是参数的类型
补充:变量类型说明 : 写一个# 空格 type: 类型名

4. 不定长参数 - 解决参数个数不确定的问题

1)带*的不定长参数
定义函数的时候,如果在某个形参前面加*,那么这个参数就变成了一个不定长参数,调用的时候这个形参可以接受若干个实参。
本质:如果形参有*,那么这个参数就会自动变成一个元组,它接收到的所有的实参会作为这个元组的元素
注意:a. 带*的不定长参数在传参的时候只能使用位置参数
b. 定长参数和带*的不定长参数混用的时候,*前的定长参数必须用位置参数传参,*后面的定长参数必须用关键字参数传参
2)带**的不定长参数 (了解)
本质:如果形参前有**,那么这个参数就会自动变成一个字典,它接收到的所有的实参会作为这个字典的键值对
传参的时候只能用关键字参数传参

作业

  1. 编写一个函数,交换指定字典的key和value。

    def exchange (dict1) :
        """
    
        :param dict1:输入的字典
        :return:None
        """
        print({dict1[key]:key for key in dict1})
    
  2. 编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串

    def extract_letter (str1) :
        """
        
        :param str1:输入的字符串 
        :return: str2
        """
        str2 = ''
        for x in str1 :
            if 'a'<= x <='z' or 'A'<=x<='Z':
                 str2 += x
        print(str2)
    print(extract_letter('asda213')) 
    
  3. 写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母

    def capitalize (str1) :
        """
    
        :param str1:输入的字符串
        :return:str2
        """
        str2 = str1[0].upper() +str1[1:]
        print(str2)
    
    capitalize('sdas552')
    
  4. 写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束

    def endswith (str1,str2) :
        """
        
        :param str1: 给的字符串1
        :param str2: 给的字符串2
        :return: 
        """
        n = len(str2)
        if str1[-n:-1] == str2 :
            print(True)
        else :
            print(False)
    
  5. 写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串

    def isdight (str1) :
        """
        
        :param str1: 输入的字符串
        :return: 
        """
        for x  in  str1 :
            if x>'9' or x<'0':
                print(False)
                break
        else :
            print(True)
    
  6. 写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母

    def upper (str1) :
        """
        
        :param str1: 需要转换的字符串
        :return: str2
        """
        str2 = ''
        for x in str1:
            if 'a'<= x <= 'z':
                str2 += chr(ord(x)-32)
            else :
                 str2 += x
        print(str2)
    
  7. 写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充

       例如: 原字符:'abc'  宽度: 7  字符:'^'    结果: '^^^^abc'
            原字符:'你好吗'  宽度: 5  字符:'0'    结果: '00你好吗'
    
  8. 写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1

    def index (list1,n) :
        num1 = ()
        s = 0
        for x in list1 :
            if x != n :
                s+=1
            elif x == n :
               num1 += s
            print(num1)
    
    
  9. 写一个自己的len函数,统计指定序列中元素的个数

        例如: 序列:[1, 3, 5, 6]    结果: 4
             序列:(1, 34, 'a', 45, 'bbb')  结果: 5  
             序列:'hello w'    结果: 7
    
  10. 写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值

      例如: 序列:[-7, -12, -1, -9]    结果: -1   
           序列:'abcdpzasdz'    结果: 'z'  
           序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98}   结果: 98
    
  11. 写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在

  12. 定义一个自己的update函数,将一个字典中所有的键值对添加到另外一个字典中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值