Python中函数的定义
所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候调用函数的调用包括两个步骤:
1定义函数--封装独立的功能
2.调用函数--享受 封装的成果
函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的重用
函数的体验
1.新建xx函数项目
2.复制之前完成的乘法表文件
3.修改文件,增加函数定义multiple_table():
4.新建另外一个文件,使用import导入xx函数.py项目并且调用函数
def multiple_table(): #使用def(define的缩写)关键字定义一个函数
"""
实现输出一个乘法表
:return:
"""
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}{i}={i * j}", end="\t")
print()
#在本地调用函数
#multiple_table()
#调用函数
import dyx01_函数 #导入01_函数这个文件,使用这个文件中的功能
dyx01_函数.multiple_table() #在01文件中,调用它的函数
如何定义函数
def 函数名():
函数封装的代码
1.def是英文define(定义)的缩写
2.函数名称应该能够表达函数封装代码的功能,方便后续的调用
3.函数名称的命名应该符合标识符的命名规则
可以由字母,下划得和数享组成
不能以数字开头
不能与关键字重名
函数的调用
调用函数很简单,通告函数名()即可完成对函数的调用
"""
演练:
1.编写一个打招呼say_hello的函数,封装三行打招呼的代码
2.在函数下方调用打招呼的代码
"""
name = "小明"
# 解释器知道这里定义了一个函数
def say_hello():
print("hello 1")
print("hello 2")
print("hello 3")
print(name)
#只有在函数调用时,之前定义的医数才会放执行
#函数执行完成后,会重新回到之前的程序中,继续执行后续的say_hello()
say_hello()
print(name)
能否将函数调用 放在函数定义的上方?
不能!
因为在使用函数名调用函数之前,必须要保证python已经知道函数的存在
否则控制台会提示NameError:name ‘say_hello’is not defined
函数的文档注释
在开发中,如果希望给函数添加注释,应该在定义函数的下方,使用连续的三对引号
在连续的三对引号之间编写对函数的说明文字
在函数调用位置,使用快捷键Ctrl+Q可以查看函数的说明信息
注意:因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行
函数的参数
"""
开发一个sum_2_ num的函数
函数能够实现两个数字的求和功能
"""
def sum_2_num():
num1 = 10
num2 = 20
result = num1 + num2
print("%d + %d = %d" %(num1,num2,num1+num2))
sum_2_num()
"""
开发一个sum_2_num的函数
函数能够实现两个数字的求和功能
"""
def sum_2_num(n1,n2): #n1和n2 形参 形式上的参数,没有固定的值,用来接收实参的值
"""
:param n1: 输入一个数字的值
:param n2: 输入第二个数字的值
:return:
"""
#定义两个值
print(f"求和的值是{n1+n2}")
sum_2_num(1,1) #实参 实际的参数,具有实际的值,当调用函数的时候,实参的值会通过形参,传递给函数,进行计算
形参和实参
形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的
函数的嵌套调用
一个函数里面又调用了另外一个函致,这就是函数嵌套调用
如果函数test2中,调用了另外一个函数test1
那么执行到调用 test1 函数时,会先把函数test1中的任务都执行完
才会回到test2 中调用函数test1的位置,继续执行后续的代码
函数的嵌套调用
def test1():
print("*"* 50)
print("我是test 1")
print("*"* 50)
#函数的嵌套
def test2():
print("&" * 50)
print("test2")
test1() #调用test1函数
print("&"*50)
test2()
"""
需求1:定义一个print_line函数能打印*组成的一条分割线
"""
def print_line():
print("*" *50)
print_line()
"""
需求2:定义一个 函数能够打印 由任意字符组成的分隔线
"""
def print_line(char):
print(char * 50)
print_line("#")
"""
需求3:定义一个函数能够打印 任意重复次数的分隔线
"""
def print_line(char,times):
"""
打印任意字符,任意个数组成一条分割线
:param char: 输入一个字符
:param times: 输入一个正0整形变量
:return:
"""
print(char * times)
print_line("_",3)
"""
需求四:定义一个函数能够打印任意行,分割线要求符合需求3
"""
def print_line(char, times):
"""
打印任意字符,任意个数,组成一条分割线
:param char: 输入一个字符
:param times: 输入一个正 0 整形变量
:return:
"""
print(char * times)
def print_lines(lines, char, times,):
"""
:param lines: 要打印 分隔符的行数 输入一个整形变量
:param char: 要打印分隔符的形式,输入一个字符
:param times: 要打印字符的个数,组成一条分割线
:return:
"""
# 要打印 5 行,实际上就是 调用五次 print_line() 函数
for i in range(lines):
print_line(char, times)
print_lines(2, "#", 20)
返回值
"""
函数的返回值, 当函数运行结束之后, 如果需要 产生某一些值,可以 使用 return 关键字 定义返回值
"""
def print_line(char,times):
"""
打印任意字符,任意个数组成一条分割线
:param char: 输入一个字符