JackLi07

Python之函数——基础篇

函数

函数,在BASIC中,叫subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java中叫method。

定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要执行这个函数,只需调用其函数名即可。

定义一个不带参数的函数:

def sayhi():
  print('hello')
sayhi()

定义一个带参数的函数:

def sayhi(name):
    print('hello', name)
sayhi('Jack')

 

函数参数

形参:在函数定义时接收

默认参数:函数定义时即默认给参数赋值,调用时可以不需要额外赋值,位置应在位置参数之后。(有关默认参数陷阱,请见:函数的默认参数陷阱

关键参数:指定参数名,即成为关键参数,但是关键参数必须放在位置参数之后。

非固定参数(动态参数):

(1)动态位置参数:参数前加*号,传递的参数就可以不再是固定的个数,传过来的所有参数打包成元组。(形参可以是*args,也可以是*[列表]的形式)

(2)动态关键字参数:形式参数前加**号,传递的可以是未定义的关键字参数,以字典的key-value保存。

形参排列顺序:位置参数、动态位置参数(*args)、默认参数、动态默认参数(**kwargs) 

--如果想将一整个字典传入kwargs,则应在实参前也加上**号。

实参:在函数调用时传值

按照位置传值:现有一个列表(元组)args,使用*args传入可以将args拆分后传入函数,直接使用args传则会在函数中得到(args,)

按照关键字传值:现有一个字典kwargs,使用**kwargs传入可以将kwargs拆分后传入函数(且此处的键必须为字符串类型),直接使用kwargs传会报错。

函数参数总结:

 

函数返回值

函数的外部代码想要获取函数的执行结果,就可以用函数的return语句把结果返回。

注: 1.函数执行过程中,遇return即停止执行并返回结果,可以理解为return语句代表函数的结束。

        2.如果未在函数中指定return,则返回值为None。

   3.函数永远只能返回一个值,当有多个值时会打包成元组返回。

 

局部变量与全局变量

全局变量:定义在函数外部一级代码的变量,在全局都能用

局部变量:定义在函数里的变量,只能在局部生效

在函数内部,可以引用全局变量,但不能修改(global后则可以修改)。如果全局和局部都有一个同名,函数查找顺序是由内而外的。

 

作用域

在Python中,一个函数就是一个作用域(和JavaScript类似); C#、Java中作用域为{ }

局部变量放置在其作用域中,代码定义完成后,作用域已经生成,作用域链向上查找。验证如下:

1 age = 18  # 全局作用域
2 def show_age():
3     new_age = 19  # 外层函数局部作用域
4     def inner():
5         print(age)
6         print(new_age)
7 show_age()

打印结果:

内层函数用到了外层函数以及全局的作用域的变量,但变量在此只能引用不能改变,否则会报错。

 

命名空间

命名空间也称名称空间,是存放变量名字的地方。举例说明,x=1,1存放在内存中,x变量名存在哪里呢?x本身也存在内存中。

名称空间正是存放名字x与1绑定关系的地方,它不仅存x名,也存了绑定关系。

名称空间共3种:

1.locals:函数内的名称空间,包括局部变量和形参。

2.globals:全局变量,程序所有的变量及绑定关系。

3.builtins:内置模块的名称空间

 

posted @ 2018-03-23 00:59  JackLi07  阅读(221)  评论(0编辑  收藏  举报