Python_函数

函数

一.什么是函数
 这里的函数跟数学中的函数概念不一样,也有很多不同的叫法。比如:在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
  • 定义:函数是指将一组语句集合通过一个函数名封装起来,需要执行时,直接调用函数名即可
  • 特性:减少代码重用、保持代码一致性、便于扩展。
二.函数的创建
  1. 格式:def关键字
def 函数名(参数):
    函数体
  • 命名格式:与变量的命名规则相同,必须以字母或者下划线开头,可以包含任意字母、数字和下划线。不能使用任何标点符号,而且区分大小写,不能使用保留字。
  • 形参和实参
    • 形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用,用来在函数调用的时候接受实参。(形参个数类型与实参一一对应);
    • 实参:实际参数,调用函数时传递给函数的参数,可以是常量、变量、表达式和函数传给形参。
    • 两者的区别:形参是虚拟的,不占用内存空间。形参变量只有在被调用的时候才分配内存单元。实参是一个变量,占内存空间,数据传送单向,实参传给形参,反之不行。
  • 函数的参数类型
    • 必需参数
    • 关键字参数
    • 默认参数
    • 不定长参数
# 必需参数:必需以正确的顺序和数量传入。
def test_one(name,age):
    print('Name:%s Age:%d'%(name,age))
test_one('ZhangY', 22)

# 关键字参数:使用关键字来确定传入的参数值,因此允许顺序与声明时不一致。
def test_two(name,age):
    print('Name:%s Age:%d'%(name,age))
test_two(22, 'ZhangY') # 报错
test_two(age=22, name='ZhangY')

# 默认参数:参数的默认值,如果调用时没有传入的话,就会使用默认值。
def test_three(name,age,sex='female'):
    print('Name:%s Age:%d Sex:%s'%(name,age,sex))
test_three('ZhangY', 22)
test_three('HuXY', 23, 'male')

# 不定长参数:与上述参数不同,声明时不会命名,参数数量不定。
def test_four(*tuples):
    sum = 0
    for i in tuples:
        sum+=i
print(test_four(1,2,3,4))
# 加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)的变量名会存放命名的变量参数.各个参数的位置顺序需要注意:默认、未命名可变、命名可变
# 注意:还可以这样传参
def test_five(*args):
    print(args)
test_five(*[1,2],**{'name':'ZhangY'})
  • 补充:高阶函数。满足以下条件之一:接受一个或多个函数作为输入、输出一个函数
三.函数的返回值

要想获取函数的执行结果,就可以用return语句把结果返回。
注意:

  • 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束;
  • 如果未在函数中指定return,那这个函数的返回值为None;
  • return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出;
四.函数的作用域


  1. L(local),局部作用域,即函数中定义的变量;
  2. E(enclosing),嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
  3. G(global),全局变量,就是模块级别定义的变量
  4. B(bulit-in),系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

作用域的产生:在python中,只有模块module、函数(def、lambda)、类(class)才会引入新的作用域。
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了。
在声明变量的时候,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值