函数、函数的调用、形参与实参、函数的嵌套调用、返回值、全局变量、局部变量、可变不可变参数、多省参数、多值参数、函数递归调用、内部函数、闭包、装饰器

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)

 

返回值

"""
函数的返回值, 当函数运行结束之后,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值