1.认识函数
1.1什么是函数 - 实现某一特定功能的代码的封装,每个函数都有自己的特定功能
函数把实现某一个功能所有代码打了一个包,每次需要的时候,直接调用
2函数的分类(函数是由谁创建/定义来进行分类)
2.1系统函数 - python自定义函数,需要的时候直接调用
2.2自定义函数 - 由程序员直接创建
3.定义(创建)函数
3.1语法
1 2 3 4 5 6 7 8
| def 函数名(形参列表): 函数说明文档 函数体
|
练习1 定义一个函数求两个数的和
1 2
| def sum1(x,y): print(x+y)
|
练习2:定义一个函数获取指定整数的个位数
1 2
| def qugewei(x): print(x % 10)
|
练习3:定义一个函数获取指定字符串中数字字符的个数
1 2 3 4 5 6
| 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
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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
1 2 3 4 5 6 7 8 9
| 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的阶乘
1 2 3 4 5
| 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位置参数和关键字参数混用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def func1(a, b, c): print(f'a:{a}, b:{b}, c:{c}')
func1(100, 200, 300) func1(200, 100, 300)
func1(a=100, b=200, c=300) func1(c=300, a=100, b=200)
func1(10, b=20, c=30) func1(10, c=30, b=20) func1(10, 20, c=30)
|
5.4参数默认值 - 定义函数时可以以 ‘形参名=值’ 的形式给形参提供默认值
有默认值的形参可以不传实参,如果不传实参,调用函数时,该形参使用默认值
1 2 3 4 5 6
| def func1(a=10, b=20, c=30): print(f'a:{a}, b:{b}, c:{c}') func1() func1(100) func1(100,200) func1(c=300)
|
如果定义函数时,部分参数有默认值,部分参数没有,没有默认值的参数必须在有默认值的前面
1 2 3
| def func1(a, c, b=20): print(f'a:{a}, b:{b}, c:{c}') func1(10,30)
|
6.参数类型说明
6.1有默认值的参数:默认值是什么类型,类型说明就是什么类型
6.2没有默认值的参数,需要在形参后面加 ‘:类型名’
1 2 3
| def func4(x: list, y=''): print(x, y) func4([1, 2, 3], 'abc')
|
7.不定长参数
7.1带的不定长参数 - 在形参前加,那么这个形参就可以接收任意多个实参
7.2带*的不定长参数本质就是一个元组,对应的多个实参是元组中的元素
7.3带*的不定长参数,传参的时候必须使用位置参数
7.4如果定长的参数在带*的参数后面(后面的定长参数调用时必须用关键字参数传参)
1 2 3 4 5
| def func5(*x): print(x) func5() func5(4) func5(4, 5)
|
7.5带两个*的不定长参数
1 2 3 4 5 6
| 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
1 2 3 4 5
| def sum1(num1, num2): s = num1 + num2 return s
print(sum1(10, 20))
|
1 2 3 4 5 6 7 8
| def func4(x): if x % 2: return 100 print("aaa")
print('返回值:',func4(20)) print("="*30) print('返回值:',func4(21))
|
作业
1. 编写一个函数,交换指定字典的key和value。
1
| 例如:dict1={'a':1, 'b':2, 'c':3} --> dict1={1:'a', 2:'b', 3:'c'}
|
1 2 3 4 5 6
| def change1(dict1:dict): new_dict1 = {} for key in dict1: new_dict1[dict1[key]] = key print(new_dict1) change1({'a':1, 'b':2, 'c':3})
|
2. 编写一个函数,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串
1
| 例如: 传入'12a&bc12d-+' --> 'abcd'
|
1 2 3 4 5 6 7
| def get_zimu(str1): new_str1 = '' for item in str1: if 'a' <= item <= 'z' or 'A' <= item <= 'Z': new_str1+=item print(new_str1) get_zimu('aldliaw142415weif')
|
3. 写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母
1
| 例如: 'abc' -> 'Abc' '12asd' --> '12asd'
|
1 2 3 4 5 6 7 8 9 10 11
| 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] print(new_str1) capitalize1('wfxMYdfewe')
|
4. 写一个自己的endswith函数,判断一个字符串是否已指定的字符串结束
1 2
| 例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True 字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False
|
1 2 3 4 5 6 7 8 9 10 11
| def endswith1(str1): str5 = 'c' if str5 not in str1: print(False) else: if str5 == str1[-len(str5)::1]: print(True) else: print(False)
endswith1('ababcdc')
|
5. 写一个自己的isdigit函数,判断一个字符串是否是纯数字字符串
1 2 3
| 例如: '1234921' 结果: True '23函数' 结果: False 'a2390' 结果: False
|
1 2 3 4 5 6 7 8 9
| def isdigit1(str1:str): for item in str1: if not '0' <= item <= '9': print(False) break else: print(True)
isdigit1('123456')
|
6. 写一个自己的upper函数,将一个字符串中所有的小写字母变成大写字母
1
| 例如: 'abH23好rp1' 结果: 'ABH23好RP1'
|
1 2 3 4 5 6 7 8 9
| def upper1(str1): new_str1 = '' for i in str1: if 'a' <= i <= 'z': new_str1 += i.upper() else: new_str1+=i print(new_str1) upper1('a2h2klm12+')
|
7. 写一个自己的rjust函数,创建一个字符串的长度是指定长度,原字符串在新字符串中右对齐,剩下的部分用指定的字符填充
1 2
| 例如: 原字符:'abc' 宽度: 7 字符:'^' 结果: '^^^^abc' 原字符:'你好吗' 宽度: 5 字符:'0' 结果: '00你好吗'
|
8. 写一个自己的index函数,统计指定列表中指定元素的所有下标,如果列表中没有指定元素返回-1
1 2 3
| 例如: 列表: [1, 2, 45, 'abc', 1, '你好', 1, 0] 元素: 1 结果: 0,4,6 列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权'] 元素: '赵云' 结果: 0,4 列表: ['赵云', '郭嘉', '诸葛亮', '曹操', '赵云', '孙权'] 元素: '关羽' 结果: -1
|
1 2 3 4 5 6 7 8 9 10
| def index1(list1,item): count = 0 for i in list1: if i == item: print(count, end=',') count += 1 if count == 0: print('-1')
index1([1, 2, 45, 'abc', 1, '你好', 1, 0],1)
|
9. 写一个自己的len函数,统计指定序列中元素的个数
1 2 3
| 例如: 序列:[1, 3, 5, 6] 结果: 4 序列:(1, 34, 'a', 45, 'bbb') 结果: 5 序列:'hello w' 结果: 7
|
10. 写一个自己的max函数,获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
1 2 3
| 例如: 序列:[-7, -12, -1, -9] 结果: -1 序列:'abcdpzasdz' 结果: 'z' 序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98} 结果: 98
|
11. 写一个函数实现自己in操作,判断指定序列中,指定的元素是否存在
1 2
| 例如: 序列: (12, 90, 'abc') 元素: '90' 结果: False 序列: [12, 90, 'abc'] 元素: 90 结果: True
|
12. 写一个自己的replace函数,将指定字符串中指定的旧字符串转换成指定的新字符串
1 2 3
| ```python 例如: 原字符串: 'how are you? and you?' 旧字符串: 'you' 新字符串:'me' 结果: 'how are me? and me?' ```
|