Python 学习 DAY4

函数

1.1 函数关键字

1.2 函数的定义

1.3 函数参数与作用域

1.4 函数返回值

        函数就像乐高的积木一样,可以模块化又可以彼此组合,可以构成许多甚至优秀的作品。

一  函数关键字

关键字:def

 

二  函数定义

  在python中,函数有5大基本要点,分别是def、函数名、函数体、参数,返回值等部分组成。

   def: 函数的关键字

 函数名:函数的名字,根据函数名调用函数

函数体:所写函数的具体内容

参数:为函数体提供数据

返回值:函数执行完毕后,返回的数据

一个函数的小例子:

>>>4

#定义函数 function1, 其作用是:参数的数值加上2,前提是参数a也是具体的数值

二  函数参数和作用域

2.1   函熟参数

函数的参数有必选参数,默认参数,可变参数,关键字参数,命名关键字参数

2.1.1 必选参数

input:  function1(2)

output:  4

NOTE: 如代码所示,a就是一个必选参数

2.1.2 默认参数

>>>18

其中b就是默认参数

 注:1.设置默认参数时,必选参数在前,默认参数在后,否则Python的解释器会报错;

    2.定义默认参数要牢记:默认参数必须指向不可变对象

2.1.3 可变参数

(1)当参数是可变的时候,我们可以把参数作为一个list或者tuple传进来。

>>>15

在调用函数的时候,需要将参数进行list话,如a=[1,2,3,4,5],然后才能调用。

(2)采用  *参数的形式 将参数变成可变参数‘

函数调用的时候:

(1)可以用function1(1,2,34,5)

或者

(2)a=(1,2,3,4,5)

       function1(*a)

2.1.4 关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

1 #引入关键字参数,默认为**kw
2 def person(name, age, **kw):
3     print('name:', name, 'age:', age, 'other:', kw)
1 #调用关键字参数
 2 >>>def person(name,age,**kw):
 3 ...    print('name:',name,'age:',age,'other:',kw)
 4 ...
 5 >>>person('Jack')
 6 Traceback (most recent call last):
 7   File "<stdin>", line 1, in <module>
 8 TypeError: person() missing 1 required positional argument: 'age'
 9 >>>person('Jack',36)
10 name:Jack age:36 other:{}
11 >>>person('Jack',36,city='Hangzhou')
12 name:Jack age:36 other:{'city':'Hangzhou'}
13 >>>person('Jack',36,city='Hangzhou',job='Engineer')
14 name:Jack age:36 other:{'city':'Hangzhou','job':'Engineer'}

2.1.5 命名关键字参数

对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。

  仍以person()函数为例,我们希望检查是否有city和job参数:

 

2.2 函数作用域

全局名称空间:创建的存储“变量名与值的关系”的空间叫做全局名称空间

局部名称空间:在函数的运行中开辟的临时的空间叫做局部名称空间

内置名称空间:内置名称空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。

 

python中的作用域分4种情况:

  • L:local,局部作用域,即函数中定义的变量;
  • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的(闭包常见);
  • G:globa,全局变量,就是模块级别定义的变量;
  • B:built-in,系统固定模块里面的变量,比如int, bytearray等。

加载变量的优先级顺序依次是:py 内置作用域>当前模块中的全局(文件从上而下读取)>外层作用域>局部作用域

搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

当然,local 和 enclosing 是相对的,enclosing 变量相对上层来说也是 local 。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值