day11-函数基础

本文详细介绍了Python中的函数,包括系统函数和自定义函数的定义及使用。通过实例讲解了如何定义和调用函数,如求和函数和阶乘函数。还探讨了函数的参数类型,如位置参数、关键字参数、默认值、类型说明以及不定长参数的使用规则。此外,文中还提到了函数的返回值和函数调用的过程,强调了return关键字的作用。
摘要由CSDN通过智能技术生成

认识函数和定义函数

1.认识函数
  1. 概念:函数就是对实现某一特定功能的代码的封装 - 机器
  2. 函数的分类
    • 系统函数(系统造好的机器) - 由Python创建好的函数,例如:print、input、type、max、min、id等
    • 自定义函数(自己造机器) - 由程序员自己创建的函数
2.定义函数(创建函数)- 造机器

语法:

def 函数名(形参列表):
    函数说明文档
    函数体

说明:

  • def - 关键字;固定写法
  • 函数名 - 由程序员自己命名
    • 要求:是标识符;不能是关键字
    • 规范:
      • 见名知义(看到函数名大概知道这个函数的功能是什么);
      • 所有的字母都小写,多个单词之间用下划线隔开
      • 不使用系统的函数名、类名和模块名
  • () - 固定写法
  • 形参列表 - 以变量名1, 变量名2, 变量名3,…格式存在
    • 这儿的每一个变量就是一个形参,如果不需要形参,括号里面什么都不写
    • 形参是用来将函数外部的数据传递到函数内部(可以理解成连接函数外部和内部的通道)
    • 需不需要形参就看实现函数的功能需不需要额外的数据
  • : - 固定写法
  • 函数说明文档 - 本质就是文档注释
  • 函数体 - 和def保持一个缩进的一条或者多条语句;
    • 函数体就是实现函数功能的代码

练习:定义一个函数,求任意两个数的和

def sum_1(num1, num2):
    return num1 + num2
    
    
num1 = 10
num2 = 3
print(sum_1(num1, num2))			# 13

练习:定义一个函数,求N的阶乘

def factorial(n):
    result = 1
    for i in range(1, n+1):
        result *= i
    return result


print(factorial(n = 10))			# 362800

初学者定义函数的基本流程:

  1. 确定函数功能
  2. 根据函数功能确定函数名
  3. 确定形参(看实现函数的功能需不需要额外的数据,需要几个)
  4. 实现函数的功能(将形参当成对应的数据来使用)
  5. 确定函数返回值
  6. 写函数说明文档
调用函数
  1. 定义函数的时候不会执行函数体(重要!)
  2. 调用函数
    • 语法:函数名(形参列表)
    • 说明:
      • ​ 函数名 - 需要使用的函数的名字(函数名必须是已经定义过的函数的函数名)
      • () - 固定写法
      • 实参列表 -
        • 多个数据用逗号隔开:数据1, 数据2, 数据3, …
        • 原则上定义函数的时候有多少个形参,调用函数就需要多少个实参
  3. 函数调用过程
    • 当代码执行到函数调用表达式的时候:
      1. 回到函数定义的位置,用实参给形参赋值
      2. 执行函数体
      3. 确定函数返回值
      4. 回到函数调用的位置,接着往后执行

返回值

1.返回值 - 将函数内部的数据传递到函数外部
1)怎样将一个数据作为函数的返回值

语法:return 需要返回的数据(需要从函数内部传递到外部的数据)

2)怎样在函数外部获取函数的返回值

获取函数调用表达式的值,就是获取函数的返回值。(函数调用表达式的值就是函数的返回值)

返回值能做的事情,函数调用表达式都可以做

def sum1(num1, num2):
    return num1+num2


num1 = 20
num2 = 30
num3 = sum1(num1, num2)
print(num3 + 10)				# 60
def func(x, y):
    x.append(y*2)
    return x


list1 = [func([10, 20], 30), 'abc']
print(list[0][-1])				# 60

return关键字

return的作用有两个:
  1. 确定函数返回值(将函数内部的数据传递到函数外部)
  2. 提前结束函数(执行函数体的时候如果遇到了return,那么函数直接结束)
def func1():
    print('======')
    return
	print('++++++')
    print('------')
    
    
func1()			# ======
def download(state):
    if not state:
        return
    print('连接服务器')
    
    
download(True)			# 连接服务器
def odevity(num):
    if num % 2:
        return '奇数'
    return '偶数'


print(odevity(343))			# 奇数

函数的参数

1.位置参数和关键字参数
  1. 位置参数 - 直接将多个数据用逗号隔开,让实参和形参从位置上一一对应(第一个实参给第一个形参赋值)
  2. 关键字参数 - 以'形参=实参'的形式传参
  3. 位置参数和关键字参数混用 - 位置参数必须在关键字参数的前面
def func1(x, y, z):
    print(f'x:{x}, y:{y}, z:{}')
    
# 位置参数
func1(10, 20, 30)			# x:10, y:20, z:30
# 关键字参数
func1(x=10, y=20, z=30)		# x:10, y:20, z:30
# 混用
func1(10, 20, z=30)			# x:10, y:20, z:30
func1(10, z=30, y=20)		# x:10, y:20, z:30
2.参数默认值
  • 定义函数的时候可以通过'形参=实参'给参数赋默认值,调用函数的时候有默认值的参数可以不用传参
  • 定义函数的时候可以只给部分参数赋默认值,那么这个时候没有默认值的参数必须在有默认值参数的前面
def func2(x=10, y=20, z=30):
    print(f'x:{x}, y:{y}, z:{z}')
    
    
func2()					# x:10, y:20, z:30
func2(100)				# x:100, y:20, z:30
func2(100, 200)			# x:100, y:200, z:30
func2(100, 200, 300)	# x:100, y:200, z:300
func2(y=200)			# x:10, y:200, z:30
3.参数类型说明和返回值类型说明

参数类型说明:

  1. 无默认值的参数:类型名
  2. 参数赋默认值

返回值类型说明: ->类型名

def func3(x: list, y='') -> list:
    return [10, 20, 30]


print(func3([10]))			# [10, 20, 30]
4.不定长参数 - 一个形参可以同时接收多个实参
  1. 在参数名前加* ,那么这个参数就可以同时接收多个参数(必须是位置参数)
    • 原理:带*的参数会变成一个元组,接收到的实参会变成元组中的元素
注意:带*的不定长参数在传参的时候只能用位置参数
def func4(x, y, *z):
    print(f'x:{x}, y:{y}, z:{z}')
    
    
func4(10, 20, 30, 40, 50)			# x:10, y:20, z:(30, 40, 50)
!!!如果定长参数在*对应的不定长参数的后面,定长参数在传参的时候必须使用关键字参数
def func5(*x, y, z):
    print(f'x:{x}, y:{y}, z:{z}')
    
    
func5(10, 20, y=30, z=40)			# x:(10, 20), y:30, z:40
def func6(z, *y, z):
    print(f'x:{x}, y:{y}, z:{z}')
    
    
func6(10, 20, 30, 40, z=100)		# x:10, y:(20, 30, 40), z:100
!!!定义函数的时候,如果参数中有一个独立的*,它的作用是让你调用这个函数的时候*后面的参数必须用关键字
def func7(x, *, y, z):
    pass


func(10, y=100, z=200)
  1. 在参数名前加** ,那么这个参数就可以同时接收多个实参(必须是关键字参数)
    • 原理:带** 的参数会变成一个字典,接收到的实参会变成字典中的键值对
def func8(**x):
    print(x)
    
    
func8()						# {}
func8(a=10, b=20, c=30)		# {'a': 10, 'b': 20, 'c': 30}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值