函数
1. 函数的定义
函数就是对实现某一特定功能的代码的封装。(可以看成是具有特定功能的机器)
2. 函数的分类
函数从不同的角度可以以不同的方式进行分类,这个地方主要从函数是谁来定义的将函数分为系统函数和自定义函数:
- 系统函数 - 系统已经定义好的函数,程序员可以直接调用(用别人造好的机器)。例如:print函数、input函数、type函数、sum函数、max函数等。
- 自定义函数 - 程序员需要自己定义,然后才能使用的函数(自己造机器用)
我们现在的重要不是怎么使用系统函数,而是怎么自定义函数(怎么造机器)。
3. 定义函数
3.1 语法
def 函数名(形参列表):
函数说明文档
函数体
3.2 语法说明
def - 声明函数的关键字,固定写法
函数名 - 程序员自己命名,要求必须是标识符,不能是关键字;所有的字母都小写,多个单词之间用下划线(_)隔开
形参列表 - 以 '参数名1, 参数名2, 参数名3, ...' 的形式存在(多个变量名用逗号隔开)。形参的作用是将函数外面的数据传递到函数中。
函数说明文档 - 对函数的功能进行说明的文字(相当于机器的说明书),是用三个双引号引起来的。
函数体 - 和def保持一个缩进的一条或者多条语句。也就是实现函数功能的语句。
3.3 定义函数的实例
- 定义一个函数求打印两个数的和
def sum1(num1, num2):
"""
求两个数的和
:param num1: 第一个数
:param num2: 第二个数
"""
print(num1 + num2)
- 定义一个函数,打印指定数的阶乘
def factorial(n):
"""
打印指定数的阶乘
:param n: 指定的数
"""
result = 1
for x in range(1, n+1):
result *= x
print(result)
4. 函数的调用
4.1 语法
函数名(实参列表)
4.2 语法说明
函数名 - 已经定义过的函数的函数名
实参列表 - 多个数据用逗号隔开,用来给形参赋值,本质就是想要从函数外面传到函数里面的数据
4.3 调用函数的实例
# 1. 调用sum1函数计算任意两个数的和
sum1(10, 20)
# 同一个函数可以调用多次
sum1(120, 400)
# 2. 调用factorial函数求指定数的阶层
factorial(5) # 求5的阶乘
factorial(7) # 求7的阶乘
5. 函数的参数
5.1 位置参数和关键字参数
根据调用函数的时候实参的传递方式可以将实参分为位置参数和关键字参数两种:
- 位置参数 - 直接让实参的值和形参一一对应
- 关键字参数 - 调用函数的时候以’形参名1=值1,形参名2=值2,…'的形式传参
def func1(a, b, c):
"""
示例函数
"""
print('a:{}, b:{}, c:{}'.format(a, b, c))
# 位置参数
func1(10, 20, 30) # a:10,b:20,c:30
# 关键字参数
func1(a=100, b=200, c=300) # a:100,b:200,c:300
func1(c=33, a=11, b=22) # a:11,b:22,c:33
# 位置参数和关键字参数混用(要保证每个参数都有值,并且位置参数必须在关键字参数的前面)
func1(100, c=300, b=200) # a:100,b:200,c:300
5.2 参数默认值
定义函数的时候,可以通过’参数名=值’的形式给参数默认值; 有默认值的参数在调用的时候可以不传参。
注意: 定义函数的时候有默认值的参数必须放在没有默认值参数的后面
# 给所有的参数赋默认值
def func2(a=1, b=2, c=3):
"""示例函数"""
print('a:{},b:{},c:{}'.format(a, b, c))
func2() # a:1,b:2,c:3
func2(10) # a:10,b:2,c:3
func2(10, 20) # a:10,b:20,c:3
func2(b=200) # a:1,b:200,c:3
5.3 不定长参数
不定长参数指的是声明函数的时候函数的参数个数不确定。
- 声明函数的时候在参数名前加
*
, 这个参数就会变成一个元祖,元祖中的元素就是对应的多个实参- a.调用的时候只能使用位置参数
- b.不定长参数后面如果有其他的定长参数,那么它后面的其他参数必须使用关键字参数传参
- 声明函数的时候在参数名前加
**
, 这个参数就会变成字典,字典中的元素-> 关键字:实参值- a.调用的时候只能使用关键字参数
- b.
*
和**
同时使用时这个函数参数个数不确定,只能可以同时使用位置参数和关键参数;写的时候*
要在**
的前面
# 1. 写一个函数,求多个数的和
def yt_sum(*x):
sum1 = 0
for num in x:
sum1 += num
print(sum1)
yt_sum()
yt_sum(10)
yt_sum(10, 20)
yt_sum(1, 2, 3)
yt_sum(1, 23, 4, 5, 6, 7, 8)
# 2. 获取学生信息
def get_info(**info):
for key in info:
print(info[key])
get_info(name='余婷')
get_info(name='余婷', age=18)
get_info(name='余婷', age=18, sex='女')
# 3. 同时使用*和**示例
def func3(*args, **kwargs):
print(args)
print(kwargs)
func3()
func3(1, 2)
func3(a=10, b=20, c=30)
func3(12, a=10)
6. 函数返回值
6.1 什么是函数的返回值
-
返回值的作用: 将函数里面的数据传递到函数外面
-
怎么确定函数返回值: 函数声明的时候return后面的值就是函数的返回值;如果没有return,函数的返回值就是None
-
怎么获取函数返回值: 函数调用表达式的值就是函数的返回值(获取函数调用表达式的值)
函数调用表达式: 函数调用语句; 普通数据能做的事情函数调用表达式都可以
6.2 return 语句
return 表达式 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
# ================1.确定函数返回===============
def yt_sum(num1, num2):
return num1 + num2
def func1():
print('=====')
print('++++++')
return # return None
print('------')
func1()
# ======================2.获取函数返回值====================
def func2(num):
# num = 2
# return 4
return num*2
# a.函数调用表达式可以给变量赋值
# a = 4; print(a)
a = func2(2)
print(a)
# b.函数调用表达式可以作为函数的参数
print(func2(2)+2)
# c.函数调用表达式可以作为序列中的元素
list1 = [func2(2), 10]
print(list1) # [4, 10]
近期我们公司组织了大量免费的线上公开课和体验课,对于新手来说,上手一门新语言的时候,如果有人指导可以少走很多的弯路。最近一段时间,体验课几乎每周都有,我会每周更新体验课的信息,需要参加的小伙伴可以直接扫描下方的二维码联系我们,体验课的班级讨论群会一直保留,也会有老师答疑,希望能够帮助到大家。最为关键的是这些都是免费的,没有任何人强制你消费一毛钱。在收到体验账号后,如果愿意你可以屏蔽掉付费课程销售人员的电话和QQ,我们并不会因此将你从学习群中移除掉,仍然会一如既往的帮助你。所以希望大家能够理解公司行为和我个人行为的区别,我就是一个单纯的程序员,我分享这些知识是为了让更多的人学习编程并用它来改变自己的生活。当键盘侠和五毛党很容易,创作不易,分享自己知识和经验更加不易。