您的位置:首页 > 文旅 > 美景 > python基础语法 005 函数1-1

python基础语法 005 函数1-1

2024/12/23 1:47:10 来源:https://blog.csdn.net/qq_41070511/article/details/139941060  浏览:    关键词:python基础语法 005 函数1-1

1 函数

1.1 什么是函数

指:输入一定的数据以后,能根据里面的执行步骤,算出一些数据的值;得到相关的数据,获取对于的输出值。

存储指定功能的程序,进行相应的复用

解释:

  • 洗衣服 ==》输入值(洗衣粉,脏衣服,水) ==》(干净的衣服)

  • 橘子题:输入值:单价、重量;==》输出:价格

1.2 函数的定义

函数在python中怎么定义?怎么使用?

1) 怎么定义? 

def (空格) 函数名称(函数的参数1,参数2,参数3..):"""文档字符串 docstring函数的注释,这个函数是干嘛用的,参数:返回值:    """(缩进)函数体(函数具体执行的逻辑)return 函数的返回值(输出)#例子
#加法
def add(a, b):"""两数相加"""c = a + breturn c

2) 怎么使用?

#函数的调用
#a = 1, b =2
add(a = 1, b = 2)add(1, 2)
#任何判断函数语句执行了,可以加一些日志打印如:
def add(a, b):"""两数相加"""print("函数正在执行")c = a + breturn c

3) 怎么获取结果?

#如何获取最后的结果?
#怎么显示
#print 和 return区别
#print:显示在屏幕上,打印出来
#return:函数运算的结果,获取结果以后不一定会打印出来,仅获取结果,需要给return在赋值一个变量,再print打印出这个变量print(add(1, 2))#使用变量接收
res = print(add(3, 5))
print(res )

1.3 函数的作用:

  • 实现某个指定的功能,可以重复使用
  • 提高代码的复用性,不用写很多重复代码
  • 函数还能通过命名增加可读性
  • 可以隐藏大量的逻辑
#例子:足球队招人
#当发现在复制、粘贴相同的或者类似代码的时候,则极有可能需要定义一个函数
#把同样的一段代码存储到函数当中 ===> 封装
#封装成函数(盒子)  ===》把一段代码存储到函数当中
#函数的作用:存储一段程序(有长有短),提高代码的复用性
#函数不会存储变量、数据,变量一般放在外面===》实际参数,变量一般是会变的作用
#实际参数是这样被提取出来:当封装函数的时候,通常会有一些变化的东西(数据)
#什么时候封装函数:重复使用def join_team(age, gender):if (18 < age < 22) and gender == '女':print("请开始训练")age = 17
gender = '男'join_team(age, gender)

1.4 函数的参数

思考:

  • 为什么要加参数
  • 参数的个数、类型
  • 多个参数和调用的顺序

1.4.1 形式参数、实际参数、位置参数

#or_list = ['abc']
#ele = '小一'
形式参数:函数在定义的时候写的参数,没有意义只是占坑的,即变量名 or_list , ele
实际参数:函数在调用的时候写的参数,是个值                  =['abc']  ='小一'
位置参数:形式参数和实际参数要一一按照顺序对应,不多不少,位置一样

1.4.2 默认参数

默认参数:在函数定义的时候,给形式参数一个默认值,即缺省值
        如果有默认值,在函数调用时,如果位置参数一一对应,传入了实际参数,默认参数不会生效
        如果没有传入实际参数

  • 作用1:如果没有传入实际参数,则默认值会生效
  • 作用2:可以简化函数的调用过程,只需要传入少量参数就可以实现调用过程
  • 作用3:默认参数必须放到位置参数的后面

#为什么要写默认参数
def append(or_list, ele = '哇哈哈'):"""对列表进行数据添加"""or_list.append(ele)return  or_listprint(append(['abc'], '小一')) #['abc', '小一']###################作用2#############################3
#没有传ele,默认ele为默认值
print(append(['abc']))  #['abc', '哇哈哈']def get_name(firstname, lastname = ''):return  firstname + lastnameprint(get_name("周", "杰伦")) #周杰伦
print(get_name("周", )) #周#################作用3:默认参数必须放到位置参数的后面############################3333
def get_name(firstname = '', lastname):return  firstname + lastnameprint(get_name("周", "杰伦"))
#SyntaxError: non-default argument follows default argument
#print(append(['aaa']))   #报错,缺少位置参数ele
#TypeError: append() missing 1 required positional argument: 'ele'#print(append(['aaa'], '小一', '小二'))  #报错,需要2个位置参数,但给了3个
#TypeError: append() takes 2 positional arguments but 3 were givenprint(append('小一',['aaa'])) #报错,顺序不一样,顺序要保持一致
#AttributeError: 'str' object has no attribute 'append'

1.4.3 关键字参数:关键字参数也要放到位置参数的后面

关键字参数:

  • 作用1:还是相对于位置参数讲的,

        可以提高函数调用时的可读性,更加容易理解实际参数的意义
        关键字的名字  === 》 形式参数来的
        原因:参数多的时候,搞不清楚位置

  • 作用2:关键字参数区别位置参数:可以不按照顺序进行调用,可以交换顺序

def get_name(firstname , middle,  lastname= ''):return  firstname + middle +lastnameprint(get_name("周", middle='最棒', lastname = "杰伦")) #周最棒杰伦print(get_name("周", lastname = "杰伦",middle='最棒')) #周最棒杰伦##作用3:关键字参数也要放到位置参数的后面
print(get_name( lastname = "杰伦", "周", middle='最棒')) 
#SyntaxError: positional argument follows keyword argument

1.4.4 可变长参数

  • 指明:不知道这个函数多少个参数
  • 不需要每个参数都传入,可以选择传不传
  • *, **
  • 打印时元组
  • 星号放在函数调用里面
  • 两个星号表示关键字和字典
1 ) *arg
"""
可变长参数:
表示形式:*names,在函数内部的表现形式:names是元组可以接收从函数调用的时候,多余的位置参数*names, 加在其他的位置参数的后面可以只有一个 *names,可以的
"""
def get_name(firstname, *names):"""获取名字"""print(firstname)print(names)return  firstnameget_name('xiaoyi')
"""结果
xiaoyi
()
"""
get_name('xiaoyi', 'good','ok')"""结果
xiaoyi
('good', 'ok')
"""#可变长参数放在固定参数的前面会怎么样
def get_name( *names, firstname):"""获取名字"""print(firstname)print(names)return  firstnameget_name('xiaoyi', 'good','ok')"""结果get_name('xiaoyi', 'good','ok')
TypeError: get_name() missing 1 required keyword-only argument: 'firstname'"""#有一个*names
def get_name(*names):"""获取名字"""print(names)get_name('xiaoyi', 'good','ok') #('xiaoyi', 'good', 'ok')#有一个2个 *names
def get_name(*names, *names):"""获取名字"""print(names)get_name('xiaoyi', 'good','ok')"""结果 
SyntaxError: invalid syntax
"""
2) **kwargs
"""
**kwargs, keyword args 关键字不定长参数
关键字参数只能放在位置参数的后面
"""def get_name(*names, **kwargs):"""获取名字"""print(names)print(kwargs)get_name('xiaoyi', 'good','ok')
"""结果
('xiaoyi', 'good', 'ok')
{}
"""get_name('xiaoyi', 'good','ok', middle = 'hello', yit = 'world')"""结果
('xiaoyi', 'good', 'ok')
{'middle': 'hello', 'yit': 'world'}
"""get_name('xiaoyi', 'good','ok', middle = 'hello', yit = 'world', yit = 'yyy')
"""结果
SyntaxError: keyword argument repeated: yit
"""

1.5 函数的返回值

return

  • 中止函数
  • 条件控制的中止
  • return 可以有多个,用逗号隔开,返回的格式为元组
  • 作用:拿到返回值做进一步处理
  • 默认return None,
  • 无return ,默认返回None

#函数里面return 表示函数的返回值,可以在调用函数之后通过变量进行接收
#return 知识点2:函数体遇到return就终止运行,相当于for的break
"""
return:
1,函数遇到return就终止
2、函数的返回值return,函数调用以后可以通过变量接收return值,
函数的输出数据是由return 决定的
"""#例子:
def add(a, b):if a > 100:return  a + belif a == 100:return  a + 2*belse:return a + 3 * bprint(add(3, 10)) #33#例子3 if很多的时候,可以巧妙运用return的方式去终止函数
def add(a, b):if a > 100:return a + breturn a + 3 * bprint(add(111, 10))#121#例子4:打印None
#函数调用后得到的数据是由return决定的,
# 函数没有return,得到的数据就是None
def add(a, b):c = a + bprint(add(3, 10)) #None#append
# my_list = ['abc', 'end']
# a = my_list.append('current') #这里指方法
# print(a)#自己实现一个append
def append(or_list, ele):"""对列表进行数据添加"""or_list.append(ele)return  or_listprint(append(['abc'], '小一'))  #['abc', '小一']

函数:一定要掌握的知识:

  • return 
  • 函数的形式参数
  • 函数的实际参数
  • 函数的位置参数
  • 默认参数:简化调用过程
  • 关键字参数:可以交换参数的顺序,并且提高可读性
  • 可变长参数

1.6 函数之间的调用 

"""
函数之间的调用,在一个函数去用另外一个函数#eat放在congratulat也可以运行,和python运行的代码有关系只有函数调用了才会执行缩进的代码
若把eat放在函数调用的后面,就会报错,因为eat还没定义
即调用函数之前必须把函数定义号,与函数定义的顺序无关
"""def congratulate(name,money,food):"""庆祝宴席:return:"""print("{}宴席花了多少:{}".format(name,money))#请客eat(name, food)def eat(name, food):print("{}喜欢吃食物:{}".format(name,food))eat('xiaoyi','apple')
congratulate('小王子', 100, 'milk')

小心递归函数使用,导致死循环,函数不要相互调用,除非熟练

def get_money(date):get_name('xiaoyi', "wang")return "我在{}h号获取".format(date)def get_name(firstname, lastname = ''):get_money(7)return firstname + lastnameprint(get_money(7))"""结果
RecursionError: maximum recursion depth exceeded"""

最好不要自己调自己,容易造成递归错误

def get_money(date):print("小一")get_money(7)print("hello")print(get_money(8))#RecursionError: maximum recursion depth exceeded while calling a Python object

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com