Python——函数的定义与函数调用的方法

1、定义

定义函数的时候,函数内部代码不会执行

def 函数名():
    函数内部封装的代码
#函数名的命名规则与变量名的命名规则一致
2、调用

只有在调用的时候,函数代码才会真正执行

调用的时候,可以隔开一个,具体使用方法

函数名()

 3、有参数的函数

函数在定义的时候有几个参数,调用的时候就要对应有几个参数值,不能漏

函数的主要功能就是封装代码

一个人已经定义的函数,不应该再去修改函数内部的定义代码

注意定义函数的时候,形参没有值;只有调用函数时,通过把实参传递给形参

def 函数名(参数1,参数2,参数3,......):

    函数内部的代码


函数名(参数1的值,参数2的值,参数3的值,.....)
4、什么是形参和实参

如下形参就是a,b;实参可以是常量、变量、表达式

 5、函数的返回值

程序开发中,希望执行一个函数后,告诉调用者一个结果,以便于调用者进一步处理

有时候,函数并不是要显示什么内容,而是把值返回给调用者,比如Python自带的len函数

函数内容通过return返回给调用者一个值

return后面可以是常量,也可以是变量,还可以是表达式

 6、函数的嵌套

一个函数中调用了另一个函数

# 一个函数里面又调用另一个函数
def test1():
    print("我是test1")
def my_func():
    print("我是my_func")
def test2(): # 如果不调用test2函数,那么test1和my_func都不执行
    test1() # test2内部调用了test1
    my_func()
test2() # 程序第一条执行的语句

程序设计原则:函数一旦定义,不能修改内部代码,而return可以做到不改变函数内部代码

7、return的意义
  • 需求不停的变化,但函数一旦定义函数内部的代码不应该因为需求改变而改变
  • 所以要把因为需求而改变的代码放到函数之外,函数之内代码函数定义完不改变
def cir(r):
    pie = 3.14
    return pie * r **2

print(cir(10))
print(cir(9.6))
a=cir(10)+cir(9.6)
print(a)
8、变量的作用域
  • 局部变量
    • 函数内部定义的变量就是局部变量
    • 局部变量只能在函数内部使用
    • 不同的函数局部变量名字可以相同
  • 全局变量
    • 函数外部定义的变量就是全局变量
    • 全局变量在所有函数内部也可以使用
    • 局部变量能解决的问题,不要通过全局变量解决, 尽量少定义全局变量

局部变量作用范围 

  • 局部变量从调用函数的时候开始在内存出现,函数调用完毕,局部变量从内存消失
  • 如果一个函数内部定义了局部变量,但这个函数没有被调用,那么局部变量也不在内存中存在
def my_func1():
    a = 1  # a是一个局部变量,只属于my_func1函数
    print(a)

def my_func2():
    a = 2 # a是一个局部变量,只属于my_func2函数
    print(a)

my_func1()  # 调用函数的时候,局部变量a出现了
# my_func1函数调用完毕,a消失了
# 定义函数的时候局部变量并不存在,只有调用函数的时候局部变量出现了
print("end")

 全局变量的作用范围

  • 全局变量一般定义在函数定义的上方
  • 全局变量从定义变量开始在内存中出现,一直到程序运行完成,和程序一起从内存中消失
#全局变量

num1 = 2 #全局变量1

def my_func3():
    print(num1)

def my_func4():
    print(num1)

my_func3()
num1 = 10 #全局变量2
my_func3()

 全局变量和全局变量重名

  • 如果在函数内部定义一个变量,名字和全局变量重名,那么在这个函数内部只能使用局部变量
num1 = 1
def my_func1():
    num1 = 10   # 这里不是为全局变量赋值, 这里是定义了一个局部变量, 名字和全局变量重名
    print(num1) # 打印的是局部变量num1的值
    num1 += 1   # 这里改的是局部变量num1的值

def my_func2():
    print(num1) # 全局变量num1

my_func1()
my_func2()
print(num1) # 打印的是全局变量num1的值
9、global关键字
  • 当需要在函数内部修改全局变量的值,修改前需要用global修饰全局变量的名字
def 函数():
    global 全局变量名
    全局变量名 = 值

 

a = 1

def my_test1():
    global a
    a = 2

def my_test2():
    a = 3   # 这里的a是一个只在my_test2里面的局部变量
    my_test1()

print(a)  # 程序入口在这里
my_test2()
print(a)

结果是1;2

  • 小结代码
a = 1
def my_test1():
    a = 2
    return a  # 函数的返回值都是依赖于return, 一个没有return的函数是没有返回值

def my_test2():
    a = 10

num1 = my_test2()  # 把my_test2的返回值赋值给变量num1   没有值

print(my_test1())  # 用print显示my_test1函数的返回值  2
print(a)   #1

10、形参与实参的传递
  • 如果形参的类型为数字或者字符串,在函数内部修改了形参的值,实参的值不会改变
def my_func1(a):   # 这里的a是形参, 这里的a只是一个属于函数my_func1的形参,而不是全局变量a
    a += 1  # 在函数内部,修改了形参a的值,不是修改了全局变量a的值
    print(a) # 输出了形参a的值

a = 10  # 程序的入口 定义一个全局变量a,值是10
my_func1(a)  # 把全局变量a做为实参,去调用函数my_func1    11
print(a) # 全局变量a的值没有改变      10

 函数的形参,本质就是一个属于函数内部的局部变量

a = 10

def my_test1(a):
    a += 1   # 重名后,这里操作的是局部变量a
    print(a)


my_test1(a)  # 把全局变量做为形参来调用my_test1函数了
print(a)
# 代码中一共出现两个变量
# 全局变量a和一个形参a(形参其实就是一个属于函数内部的局部变量)
# 以上代码的结果是全局变量与局部变量重名

形参类型如果是列表,集合字典,形参的值改变,会影响实参的值

a = [1, 2, 3]

def my_test1(a):  # 这里的a是一个形参,也是一个属于my_test1的局部变量
    a[0] = 10  # 修改的是形参a的值
    # 如果形参的类型为列表,集合和字典,修改形参的值会直接影响实参的值

print(a)  # 显示的是全局变量a的值
my_test1(a) # 把全局变量做为实参,来调用my_test1
print(a)
11、缺省参数
  • 形参可以有缺省值,当调用函数的时候,没有提供相应的实参,那么形参会采用缺省值
    def 函数名(形参 = 缺省值)
    def my_test1(a, b = 10):  # 形参b有缺省值
        print(a, b)
    
    def my_test2(a = 1, b = 2):
        print(a, b)
    
    my_test1(1, 2)
    my_test1(100)
    my_test2()
    my_test2(100, 12)
  • 不能把有缺省值的形参写在没有缺省值形参的前面

12、函数——匿名函数

  • ambda是给特别小型的函数准备一个简化语法
  • 不用写def,也不用写return
  • 一行代码就能定义一个函数
  • lambda 参数1, 参数2, ..... : 函数要执行的代码
def my_sum(a, b):
#     return a + b

my_sum = lambda a, b : a + b
num1 = my_sum(3, 4)
print(num1)
num1 = my_sum(23, 4)
print(num1)
  • lambda注意事项
    • 匿名函数内部只能有一条语句,而且这条语句要有个具体的值返回
    • 匿名函数不能使用print
def my_max(a, b):
#     if a > b:
#         return a
#     else:
#         return b

# num1 = my_max(4, 5)
num1 = (lambda a, b : a if a > b else b)(4, 5)
print(num1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值