函数
函数 - 函数基础(定义函数、调用函数、参数和返回值)、匿名函数、变量作用域、实参高阶
1.什么是函数
1).概念
函数就是实现某一特定功能的代码的封装 -> 一个函数对应的功能(函数存储的功能)
2).分类(函数由谁创建的进行分类)
a.系统函数 - 由python语言已经创建号的函数(python自带的函数),例如:print、input、type、id、max、min、sorted、sum等
b.自定义函数 - 由程序员自己创建的函数
2. 定义函数(造机器)
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - 关键字;固定写法
函数名 - 由程序员自己命名;
要求:是标识符,不能是关键字
范围:见名知义(看到函数名就大概知道函数的功能)、不适应系统的函数名、类名、模块名、字母都小写,多个单词用下划线隔开
(): - 固定写法
形参列表 - 以’变量名1,变量名2,变量名3,…'的形式存在,这儿每一个变量就是一个形参;形参可以没有,也可以有多个。形参可以将函数外部的数据传递到函数内部;定义函数的时候需不需要形参需要几个看实现函数的功能需不需要额外的数据,需要几个
函数说明文档 - 本质就是和def保持一个缩进多行注释;用来对函数的功能、参数和返回值进行说明的(说明书)
函数体 - 和def保持一个缩进的一条或者多条语句,本质就是实现函数功能的代码。(电路结构和机械结构)
求5的阶乘
def factorial(num):
result = 1
for x in range(1,num+1):
result *= x
print(result)
factorial(5)
练习1:写一个函数求两个数的和
def sum1(x,y):
'''
(功能说明区)求任意两个数的和
:param num1:(参数说明) 数字1
:param num2:数字2
:return:(返回值说明) None
'''
sum = x + y
print(sum)
sum1(5,6)
练习2:写一个函数求5乘以6的结果
def product(x,y):
sum = x * y
print(sum)
product(5,6)
练习3:写一个函数统计指定字符串中数字字符的个数
def count_number(str1):
count = 0
for x in str1:
if '0' <= x <= '9':
count += 1
print(count)
count_number('123qdasa2')
练习4:定义一个函数获取任意一个整数(正负都可以)的十位数
def get_tens_digit(x):
if x < 0:
x *= -1
print(x // 10 % 10)
get_tens_digit(-155)
练习5:定义一个函数,获取指定列表中所有数字元素
def get_numbers(list1):
count = 0
list2 = []
for x in list1:
if type(x) == int or type(x) == float:
list2.append(x)
print(list2)
get_numbers([19,'ads',324,True,None])
练习6:定义一个函数,获取另个字符串的公共部分
def get_common_char(str1,str2):
str3 = set(str1) & set(str2)
print(''.join(str3))
get_common_char('ad2ad','da223')
练习7:定义一个函数交换字典的键和值
def replace_key_value():
dict1 = eval(input("请输入一个字典:"))
dict2 = dict([(value,key) for key,value in dict1.items()])
print(dict2)
replace_key_value()
3.调用函数
调用函数
a.重要结论:定义函数的时候不会执行函数,调用函数的时候才会执行
b.调用函数
语法:
函数名(实参列表)
说明:
函数名 - 需要哪个函数的功能就调用哪个函数,想要调用哪个函数就写哪个函数的函数名
注意:函数名必须是已经定义过的函数的函数名
() - 固定写法
实参列表 - 以’数据1,数据2,数据3,…‘的形式存在;实参就是真正通过形参传递到函数内部的数据
实参的个数由形参决定,默认情况被调用的函数有多少个形参调用的时候就需要多少个实参
c.函数调用的过程
当代码执行到函数调用语句的时候
第一步:回到函数定义的位置
第二步:传参(用实参给形参赋值的过程),传参的时候必须保证每个形参都有值
第三步:执行函数体
第四步:确定返回值
第五步:回到函数调用的位置,接着往后执行
4.函数的参数
1).位置参数和关键字参数
根据实参的传递方式不同将不同函数的实参分为这两种
a.位置参数
调用函数的时候直接将多个数据用逗号隔开,实参和形参从位置上一一对应
b.关键字参数
调用函数的时候,在数据前面加上’形参名=',实参和形参有形参名来对应
c.两种参数混合用
要求:必须保证位置参数在关键字参数前面
2).参数默认值
定义函数的时候可以给形参赋默认值,调用函数的时候已有默认的参数可以不用传参,直接使用默认值
如果是给部分参数赋默认值,必须保证没有默认值的参数在有默认值参数的前面
3).参数类型说明
参数类型说明:定义函数的时候指定参数类型
a.没有默认值的参数添加类型说明
形参名:数据类型
b.有默认值的参数,默认值的类型就是参数的类型
4).不定长参数
a.带*号的不定长参数
在形参前面加*号,那么这个参数就变成了一个元组,用来接收对应的所有的实参(实参是元组中的元素)
记住:如果函数参数在带*的参数后面,那么后面的这些参数在调用的时候必须使用关键字参数
定义一个函数求多个数的和
def sum1(*nums):
pass
sum1(10,20)
sum1(10,20,30,40,50)
def func4(a,*,b,c):
pass
#要求*后面的参数位关键字参数
5.函数的返回值
什么是返回值
意义:返回值就是从函数内部传递到函数外部的数据
怎么确定函数返回值(怎么将函数内部的数据作为返回值传递到函数外部):在函数体中,将需要返回的数据放到return的后面;
return后面的值是多少,函数的返回值就是多少,如果没有return,返回值None
怎么获取函数返回值(在函数外部怎么获取从函数内部传递出来的数据):在函数外部获取函数调用表达式的结果
函数调用表达式的值就是函数的返回值
什么时候需要返回值:如何实现函数的功能产生了新的数据,将新的数据作为返回值返回
补充:return的作用
1)将输入从函数内部传递到函数外部
2)提前结束函数