python函数基础总结

1.认识函数

1.1什么是函数 - 实现某一特定功能的代码的封装,每个函数都有自己的特定功能

函数把实现某一个功能所有代码打了一个包,每次需要的时候,直接调用

2函数的分类(函数是由谁创建/定义来进行分类)

2.1系统函数 - python自定义函数,需要的时候直接调用

2.2自定义函数 - 由程序员直接创建

3.定义(创建)函数

3.1语法

def 函数名(形参列表):  
    函数说明文档      
    函数体 

## 函数名 - 是标识符,不是关键字,见名知意,字母小写(下划线隔开),不使用系统的函数名,类名,模块名    
## 形参列表 - 多个变量用逗号隔开,一个变量是一个形参,可以没有形参
## 形参的作用:将函数外部的数据传递函数到函数里面
## 实现函数功能的语句块

练习1 定义一个函数求两个数的和

def sum1(x,y):
    print(x+y)

练习2:定义一个函数获取指定整数的个位数

def qugewei(x):
    print(x % 10)

练习3:定义一个函数获取指定字符串中数字字符的个数

def count_str(str1):
    count1 = 0
    for item in str1:
        if '0' <= item <= '9':
            count1+=1
    print("该字符串中数字字符的个数为:",count1)

练习4:定义一个函数将两个字符串合并成一个字符串,合并方式如下:

‘abc’ 和 ‘123’ 合并为:‘a1b2c3’

‘abcdef’ 和 ‘123’ 合并为:‘a1b2c3def’

‘abc’ 和 ‘12345’ 合并为:‘a1b2c345’

方法1

def sum_str(str1,str2):
    str3 = ''
    if len(str1) >= len(str2):
        for index in range(len(str2)):
            str3 += str1[index] + str2[index]
        str3 += str1[len(str2)::1]
        print(str3)
    else:
        for index in range(len(str1)):
            str3 += str1[index] + str2[index]
        str3 += str2[len(str1)::1]
        print(str3)
sum_str('abc','12345')

方法2

def mix_str(str1, str2):
    len1 = len(str1)
    len2 = len(str2)
    length = min(len1, len2)
    new_str = ''
    for index in range(length):
        new_str += str1[index] + str2[index]
    new_str += str1[length:] + str2[length:]
    print(new_str)

练习5:定义一个函数打印n的阶乘

def factorial(n):
    sum1 = 1
    for x in range(1,n+1):
        sum1 *= x
    print(sum1)

4.调用函数

4.1 定义函数不会执行函数体 - 调用函数的时候才会执行

4.2 语法 - 函数名(实参列表) 函数有形参,必须要传入实参,实参的个数必须和形参一致,且一一对应

5.位置参数和关键字参数

5.1位置参数 - 直接提供形参对应的数据,让实参和形参一一对应

5.2关键字参数 - 以’形参1 = 实参1, 形参2 = 实参2…的方式传参’

5.3位置参数和关键字参数混用

def func1(a, b, c):
    print(f'a:{a}, b:{b}, c:{c}')

# 位置参数
func1(100, 200, 300)    # a:100, b:200, c:300
func1(200, 100, 300)    # a:200, b:100, c:300

# 关键字参数
func1(a=100, b=200, c=300)    # a:100, b:200, c:300
func1(c=300, a=100, b=200)    # a:100, b:200, c:300

# 混用
func1(10, b=20, c=30)
func1(10, c=30, b=20)
func1(10, 20, c=30)

5.4参数默认值 - 定义函数时可以以 ‘形参名=值’ 的形式给形参提供默认值

有默认值的形参可以不传实参,如果不传实参,调用函数时,该形参使用默认值

def func1(a=10, b=20, c=30):
    print(f'a:{a}, b:{b}, c:{c}')
func1() #a:10, b:20, c:30
func1(100)  #a:100, b:20, c:30
func1(100,200)  #a:100, b:200, c:30
func1(c=300)  #a:10, b:20, c:300

如果定义函数时,部分参数有默认值,部分参数没有,没有默认值的参数必须在有默认值的前面

def func1(a, c, b=20):
    print(f'a:{a}, b:{b}, c:{c}')
func1(10,30)

6.参数类型说明

6.1有默认值的参数:默认值是什么类型,类型说明就是什么类型

6.2没有默认值的参数,需要在形参后面加 ‘:类型名’

def func4(x: list, y=''):
    print(x, y)
func4([1, 2, 3], 'abc')

7.不定长参数

7.1带的不定长参数 - 在形参前加,那么这个形参就可以接收任意多个实参

7.2带*的不定长参数本质就是一个元组,对应的多个实参是元组中的元素

7.3带*的不定长参数,传参的时候必须使用位置参数

7.4如果定长的参数在带*的参数后面(后面的定长参数调用时必须用关键字参数传参)

def func5(*x):
    print(x)
func5()
func5(4)
func5(4, 5)

7.5带两个*的不定长参数

def func9(**x):
    print(x)

func9()
func9(a=10)
func9(a=10 ,b=20 ,c=30)

8.函数返回值

8.1返回值就是将函数内部产生的数据传递到函数的外部

8.2函数的功能产生的新的数据时,就可以将新的数据作为返回值返回

8.3在函数体中通过return返回数据 - return 数据

8.4在函数外面如何使用返回值 - 函数调用表达式的值就是获取函数的返回值

8.5return 具有提前结束函数的功能,遇到return之后函数执行结束

8.6当没有返回值时,函数表达式的值为none

def sum1(num1, num2):
    s = num1 + num2
    return s

print(sum1(10, 20))
def func4(x):
    if x % 2:
        return 100
    print("aaa")

print('返回值:',func4(20))
print("="*30)
print('返回值:',func4(21))

作业

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

  例如:dict1={'a':1, 'b':2, 'c':3}  -->  dict1={1:'a', 2:'b', 3:'c'}  
def change1(dict1:dict):
 new_dict1 = {}
 for key in dict1:
     new_dict1[dict1[key]] = key
 dict1 = new_dict1
 return dict1
print(change1({'a':1, 'b':2, 'c':3}))

2. 编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串

   例如: 传入'12a&bc12d-+'   -->  'abcd'  
def get_zimu(str1):
 new_str1 = ''
 for item in str1:
     if 'a' <= item <= 'z' or 'A' <= item <= 'Z':
         new_str1+=item
 return new_str1
print(get_zimu('aldliaw142415weif'))

3. 写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母

  例如: 'abc' -> 'Abc'   '12asd'  --> '12asd'
def capitalize1(str1):
 new_str1 = ''
 if 'a' <= str1[0] <= 'z':
     new_str1 += chr(ord(str1[0]) - 32)
 for index in range(1,len(str1)):
     if 'A' <= str1[index] <= 'Z':
         new_str1 += chr(ord(str1[index]) + 32)
     else:
         new_str1 += str1[index]
 return new_str1
print(capitalize1('wfxMYdfewe'))

4. 写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束

   例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True
        字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False
def endswith1(str1,str2):
 if str2 not in str1:
     print(False)
 else:
     if str2 == str1[-len(str2)::1]:
         print(True)
     else:
         print(False)

endswith1('ababcdc','c')

5. 写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串

   例如: '1234921'  结果: True
         '23函数'   结果: False
         'a2390'    结果: False
def isdigit1(str1:str):
    for item in str1:
        if not '0' <= item <= '9':
            print(False)
            break
    else:
        print(True)

isdigit1('123456')

6. 写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母

    例如: 'abH23好rp1'   结果: 'ABH23好RP1'   
def upper1(str1):
 new_str1 = ''
 for i in str1:
     if 'a' <= i <= 'z':
         new_str1 += chr(ord(i)-32)
     else:
         new_str1+=i
 return new_str1
print(upper1('a2h2klm12+'))

7. 写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充

   例如: 原字符:'abc'  宽度: 7  字符:'^'    结果: '^^^^abc'
        原字符:'你好吗'  宽度: 5  字符:'0'    结果: '00你好吗'
def rjust1(str1,width,str2):
    new_str1 = ''
    if len(str1) >= width:
        new_str1 += str1
    else:  
        new_str1 = str2 * (width - len(str1)) + str1
    return new_str1

print(rjust1('你好吗',5,'0'))

8. 写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1

   例如: 列表: [1, 2, 45, 'abc', 1, '你好', 1, 0]  元素: 1   结果: 0,4,6  
        列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权']  元素: '赵云'   结果: 0,4
        列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权']  元素: '关羽'   结果: -1         
def index1(list1,item):
 count = 0
 str1 = ''
 for i in list1:
     if i == item:
         str1 += str(count) + ','
     count += 1
 else:
     if count == 0:
         return -1
 return str1[0:len(str1)-1]
print(index1([1, 2, 45, 'abc', 1, '你好', 1, 0],1))

9. 写一个自己的len函数,统计指定序列中元素的个数

    例如: 序列:[1, 3, 5, 6]    结果: 4
         序列:(1, 34, 'a', 45, 'bbb')  结果: 5  
         序列:'hello w'    结果: 7
def len1(xulie):
    count = 0
    for item in xulie:
        count+=1
    print("该序列的元素个数为:",count)

len1((1,2,'d','b'))

10. 写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值

 ```python
    例如: 序列:[-7, -12, -1, -9]    结果: -1   
         序列:'abcdpzasdz'    结果: 'z'  
         序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98}   结果: 98
 ```
def max1(xulie):
    if type(xulie) == dict:
        max_num = 0
        for key in xulie:
            max_num = xulie[key]
            break
        for key in xulie:
            if xulie[key] > max_num:
                max_num = xulie[key]
    else:
        max_num = xulie[0]
        for item in xulie:
            if item > max_num:
                max_num = item
    print("最大值为:",max_num)

max1({'小明':90, '张三': 76, '路飞':30, '小花': 98})

11. 写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在

 ```python
     例如: 序列: (12, 90, 'abc')   元素: '90'     结果: False
          序列: [12, 90, 'abc']   元素: 90     结果: True     
 ```
def in1(xulie,item):
    for i in xulie:
        if i == item:
            print(True)
            break
    else:
        print(False)

in1([12, 90, 'abc'],90)

12. 写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串

 ```python
     例如: 原字符串: 'how are you? and you?'   旧字符串: 'you'  新字符串:'me'  结果: 'how are me? and me?'
 ```
def replace1(str1, str2, str3):
    num1 = 0
    num2 = len(str2)
    new_str = ''
    while num1 <= len(str1) - 1:
        if str1[num1:num2] == str2:
            new_str += str3
            num1 += 3
            num2 += 3
        else:
            new_str += str1[num1]
            num1 += 1
            num2 += 1
    print(new_str)
replace1('how are you? and you?','you','me')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

azured_xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值