python基础知识-函数
一.函数
1.1 认识函数
函数就是实现某一特定功能的代码的封装(函数是组织好的,可重复使用的,用来实现特定,或相关联功能的代码段)–函数就是实现某个特定功能的代码达成一个包,以后再需要这个功能的时候,直接使用函数就行了
1.2 函数作用
函数能提高应用的模块性,和代码的重复利用率
1.3定义函数
函数分类:
系统函数(由系统创建好的函数,只需要在使用他们功能时直接调用)
自定义函数(由程序员自己创建的函数)
(1)语法结构:
def 函数名(形参列表):
函数说明文档(可有可无)
函数体
(功能说明区)
:param str1:(参数说明)需要统计的字符串
:return:(返回值说明)None
(2) 说明
def ————关键字:固定写法
函数名————程序员自己命名
- 两个要求:是标识符,不是关键字
- 三个规范:见名知义(看到函数名就大概直到函数的功能),不使用习题函数类名或者模块名;所有的字母都小写,多个单词之间下划线隔开
()————固定写法
形参列表————以变量名1,变量名2,变量名3…的形式存在。每一个变量都是一个形参,形参的个数可以是任意个。形参可以将函数外部的数据传递到函数里面
函数说明文档————函数本质就是多行注释
函数体————函数体就是和def保持一个缩进的一条或者多条语句(至少一条),逻辑上,函数体就是实现函数功能的代码
(3)初学者定义函数的步骤:
- 第一步:确定函数功能
- 第二步:确定函数名
- 第三步:确定形参(看函数体需要几个形参)
- 第四步:确定函数体实现的功能(这个时候直接将形参作为对应的数据来使用)
- 第五步:确定函数返回值
- 第六步:写函数说明文档
#案例1:定义一个函数求任意两个数的和
def sum_1(num1, num2):
print(num1 + num2)
sum_1(9, 10)
#案例2:
# 定义一个函数,求一个字符串中中文的个数
def count_chinese(str1):
count = 0
for i in str1:
if '\u4e00' <= i <= '\u9fa5':
count += 1
print(count)
count_chinese("asdf啊打发")
#案例3
# 提取两个字符串公共的字符
def public_char(str1, str2):
print(''.join(set(str1) & set(str2)))
public_char('asddf', 'asdofhjf')
#案例4
# 求10!
def cheng(num):
count = 1
for i in range(1, num + 1):
count *= i
print(count)
cheng(10)
1.4 调用函数(使用函数)
(1)语法
函数名(实参列表)————实参个数和形参个数要一致
(2)说明
函数名————必须是已经定义好的函数的函数名(需要哪个函数的功能就调用哪个函数,就写哪个函数的函数名)
()————固定写法
实参列表————实参即使通过形参从函数外部传递到函数内部的数据,以’数据1,数据2,数据3…',这儿的每个数据就是一个实参
重要结论:定义函数的时候不会执行函数体,调用函数的时候才会执行,调用多少次,函数体就会执行多少次。
调用函数的过程:每次调用函数的时候’
(1)回到函数定义的位置
(2)传参(用实参给形参赋值)
(3)执行函数体
(4)确认返回值
(5)回到函数调用的位置接着往后执行
二.参数
1.1 位置参数和关键字参数
根据调用函数的时候提供的方式不同,可以将参数分为位置参数和关键字参数
(1)位置参数——直接将多个数据用逗号隔开,让实参和形参在位置上一一对应
(2)关键字参数——以“形参名1=实参1,形参名2=实参2…”形式存在的参数。参数的顺序无关紧要。
idef my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Phoebe", child2 = "Jennifer", child3 = "Rory")
注意:
-
不管赋值多少个,都必须保证每个实参都有值
-
如果位置参数和关键字参数一起使用,那么位置参数必须在关键字参数的前面一起使用
def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function( "Phoebe", child2 = "Jennifer", child3 = "Rory")
#my_function(child2 = "Jennifer", "Phoebe", child3 = "Rory")————会报错(位置参数必须在关键字参数前)
#my_function( "Phoebe", child1 = "Jennifer", child3 = "Rory")——会报错————child1赋值了两次,child2没有赋值
1.2参数默认值
定义函数的时候可以以“形参名=值”的方式给形参赋默认值,有默认值的参数在调用的时候可以不用传参,在有默认值的情况下再次赋值就表示重新赋值。
- 如果要跳过前面有默认值的参数,直接给后面的参数传参,必须使用关键字参数
- 定义函数的时候可以有的参数有默认值,有的参数没有默认值,但没有默认值参数必须在有默认值参数前面
def my_function(country = "China"):
print("I am from " + country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
#结果
I am from Sweden
I am from India
I am from China
I am from Brazil
#
def my_function(a,b,c=10):
print(a,b,c)
my_function(a,b,c=20)
1.3参数类型说明
定义参数的时候可以对参数类型进行说明
-
没有默认值的参数:形参名:类型
def fuc(str1:list): pass
-
有默认值的参数:默认值的数据类型就是参数类型
def func(str1:list,str2=''):
pass
三.返回值
1.1 认识返回值
返回值就是从函数内部传递到函数外部的数据
定义函数的时候,需不需要添加返回值的建议:
- 实现函数的功能有没有产生新的数据,如果有新的数据,将新的数据作为返回值返回
1.2 怎么确定返回值
返回值就是return关键字后面的表达式的值(函数内部产生的数据,如果不用返回值返回时无法在函数外使用)
return 表达式
注意:print不等于return ,print只是在函数内部打印了一次返回值,return相当于从函数内部传了一个数据到函数外,在函数外可以使用这个数据
def sum_1(num1, num2):
s1=num1+num2
avg=s1/2
return s1,avg#多个返回值写在一行,写在多行只会返回一个
sum_1(9, 10)
1.3如何使用函数返回值
函数调用表达式的值就是函数的返回值(python中每个函数调用都是有结果,这个结果就是这个函数在调用的时候得到的返回值)
函数调用表达式——调用函数的语句
def func():
return 'abc'
func()
print(func)
print(func[-1])
def sum_1():
return 100
sum_1()
print(sum_1)
print(sum_1+100)
#案例
#方法1:定义一个新列表(此时已经产生了新的数据,需要返回)
def del_minus(nums:list):
new_nums=[]
for i in nums:
if i >0:
new_nums.append(i)
return new_nums
list1=[10,20,-7,-8,62]
result=del_minus(list1)
print(result)
#方法2:直接在原列表上修改
def del_minus(nums:list):
for i in nums:
if i<0:
nums.remove(i)
list1=[10,20,-7,-8,62]
print(del_minus(list))#此时是在原列表上进行删除,没有新的数据进行返回,在执行完函数功能之后它本身就是想要的的数据,此时不需要return