python 之路之函数01

时间:2023-03-09 17:52:17
python 之路之函数01

一   函数

那么要想学习函数,我们首先应该知道函数是什么?

我们这里所说的函数与数学中的函数是不同的概念,在这里我们可以把函数看成我们写代码过程中需要用到的工具。

那么这个‘工具’有什么作用呢?

1, 首先会让我们的代码变的结构变得清晰,可读性强。

2 ,我们不需要再进行大量的重复代码编写,避免代码过长,导致冗余,可读性变差。

3 ,修改代码变得简单,只需要找出需要修改的地方,修改之后其他地方有重复功能的代码不需要重复的修改。

二 函数的分类

1、内置函数
为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max() 2、自定义函数
很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。例如

三 函数的定义

首先定义函数有一个固定的形式:

定义函数的形式:
def 函数名(参数1,参数2,参数3,...):
'''注释:表达函数体的功能'''
函数体#实现函数具体功能的部分
return 返回的值 #我们在定义函数名是,要尽可能的让函数名要能反映其意义

四  函数的使用原则

先定义后使用

我们有时候说:函数即“变量”,那么“变量”必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名,必定会报错。
#
def foo():
print('from foo')
bar()
foo() #报错
在这个程序里面我们没有定义bar()这个函数,所以在使用的时候就会出现报错 #
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo() #正常
在这个过程中我们在使用bar()与foo()之前对他们俩都进行了定义。 #
def foo():
print('from foo')
bar() def bar():
print('from bar')
foo()
同样的3也不会报错,那么这是为什么呢?因为在在函数的调用中,在定义阶段是不执行代码的,只检测程序中的语法是否正确。 #结论:函数的使用,必须遵循原则:先定义,后调用
#我们在使用函数时,一定要明确地区分定义阶段:在定义阶段只检测语法正确与否和调用阶段才会执行代码。

五 定义函数的三种形式

1  有参函数:

对于有参函数,即在调用函数段运行过程,需要用户输入输入参数的函数,定义时有参,那么就是有参函数。

def max(x,y)
if x>y:
return x
else:
return y
这段子代码在运行时就需要用户输入需要比较的两个值。

2  无参函数:

无参函数,即在调用函数程序运行过程不需要对其输入参数,定义时无参,那么就是无参函数。

x=
y=
def max(,)
if x>y:
return x
else:
return y

对于这段代码用户就不需要输入参数,应为定义时已经指定了参数。

3  空函数:

那么对于空函数来说就比较特殊了,他的作用主要是起到一个占位作用,先预留一个位置,这个地方的函数子代码为空,可以不执行任何功能,需要的时候再修改。

def func()
pass#函数的子代码为空

六  调用函数的三种形式

1 直接变量名加():

比如:len(),max()等

2 表达式的方式,因为函数的运行结果一般为一个值,所以我们可以对这个值再进行运算

比如:max(1,max(2,3))

3 将一个函数的返回值当作另一个函数的参数。

比如:len(max(x,y))

七    函数返回值

那么什么是返回值:

返回值就是函数体代码运行完毕后需要有一个结果返回给使用者,这个值就是返回值return。

 没有return则会返回none

     返回值后跟一个值,那么返回值就是这个值本身。

     return后可以跟一个值也可以跟多个值,跟多个值时,用逗号分隔开,返回一个元组。

总结:1 return返回值,没有类型限制。

2 函数内可以写多个return,return是函数的结束标志位,执行第一个return后程序结束,return后面的值作为本次调用的返回值。

作业: 函数

# 1、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作
# def modify(file_name,old,new ):
# import os
# with open(file_name,'r',encoding='utf-8')as f1:
# with open('w.txt','w',encoding='utf-8')as f2:
# for line in f1:
# if old in line:
# line.replace(old,new)
# f2.write(line)
# os.remove(file_name)
# os.rename('w.txt',file_name)
# modify('a.txt','hh','HH')
# 2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
#
# def check(msg):
# res={
# 'num':,
# 'string':,
# 'space':,
# 'other':,
# }
# for s in msg:
# if s.isdigit():
# res['num']+=
# elif s.isalpha():
# res['string']+=
# elif s.isspace():
# res['space']+=
# else :
# res['other']+=
#
# return res
# res=check('hdffhk123kdf;fjj,sd ')
# print(res)
# 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
#
# def chang(name):
# if len(name)>:
# return 'yes'
# else:
# return 'no'
#
# res=chang((,,,,,))
# print(res)
#
# 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# def list1(list):
# if len(list)>:
# return list[:]
# else:
# return list
#
# res=list1([,])
# print(res)
# 5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
#
# def func(list):
# x=len(list)
# return list[:x:]
# res=func([,,,,,,,,,])
# print(res)
# 6、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# PS:字典中的value只能是字符串或列表
def func(dic):
d={}
for key in dic:
if len(dic[key])>:
# d=dic[key][:]#为什么这种方式不行呢,因为这种方式会导致d被赋值两次,第一次为v1,第二次d就变成[,],所以最后的返回值就是[,]
d[key]=dic[key][:]
return d#for循环结束之后才执行return res=func({"k1": "v1v1", "k2": [,,,]})
print(res)