函数基础

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

定义函数

-函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ();

-圆括号之间可以用于定义参数;

-函数体以冒号起始,并且缩进;

-return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

1 #计算面积函数
2 def area(width, height):
3     return width * height

参数传递

python中一切皆对象,函数中参数传递的是对象的引用。

(1)在函数中修改参数指向另一个对象时,实参的对象不会改变

(2)通过引用修改对象内容(对象必须是可变的)

 1 # 参数传递
 2 # (1)在函数中修改参数指向另一个对象时,实参的对象不会改变
 3 def change1(name_in, list_in, dict_in):
 4     name_in = "John"
 5     list1_in = [1, 2, 3]
 6     dict1_in = {'name':'John', 'age':21}
 7 
 8 # (2)通过引用修改对象内容(当然这个对象必须是可变的)
 9 def change2(list_in, dict_in):
10     list_in.append(4)
11     dict_in['age'] = 21
12 
13 name_out = 'Simon'
14 list_out = [1, 1, 1]
15 dict_out = {'name':'Simon', 'age':18}
16 
17 change1(name_out, list_out, dict_out)
18 print(name_out, list_out, dict_out)
19 
20 change2(list_out, dict_out)
21 print(list_out, dict_out)
Code
1 Simon [1, 1, 1] {'name': 'Simon', 'age': 18}
2 [1, 1, 1, 4] {'name': 'Simon', 'age': 21}
Result

全局变量:

-全局变量所有作用域都可读

-对全局变量重新赋值需要关键字global

-特殊类型如list,dict在没有global的时候可以修改,但不可赋值

 1 NAME_LIST = ['John', 'James']
 2 
 3 
 4 def func4():
 5     global NAME_LIST
 6     NAME_LIST = ['Joshua', ]
 7     print(NAME_LIST)
 8 
 9 func4()
10 print(NAME_LIST) #NAME_LSIT被func4()修改
11 
12 #程序输出
13 ['Joshua']
14 ['Joshua']
global 赋值
 1 NAME_LIST = ['John', 'James']
 2 
 3 
 4 def func4():
 5     # global NAME_LIST
 6     NAME_LIST = ['Joshua', ]
 7     print(NAME_LIST)
 8 
 9 func4()
10 print(NAME_LIST) #函数外的NAME_LSIT仍然为 ['John', 'James'],没有被func4修改
11 
12 #程序输出:
13 ['Joshua']
14 ['John', 'James']
无global 赋值
 1 NAME_LIST = ['John', 'James']
 2 
 3 
 4 def func4():
 5     # global NAME_LIST
 6     NAME_LIST.append('Joshua')
 7     print(NAME_LIST)
 8 
 9 func4()
10 print(NAME_LIST)  #虽然没有global关键字,NAME_LIST却被func4修改
11 
12 #程序输出:
13 ['John', 'James', 'Joshua']
14 ['John', 'James', 'Joshua']
无global 修改

不定长参数(动态参数)

(1) def func(*args): print(args) 

(2) def func(**kwargs): print(kwargs) 

(3) def func(*args, **kwargs): print(args) print(kwargs) 

 1 # args是一个元组,存放不定长参数
 2 def func1(*args):
 3     print(args, type(args))
 4 
 5 
 6 # kwargs是一个字典,存放类似于name='John', age=18这样的不定长参数
 7 def func2(**kwargs):
 8     print(kwargs, type(kwargs))
 9     for key in kwargs.keys():
10         print(key)
11 
12 
13 # 1,2的合并,万能参数
14 def func3(*args, **kwargs):
15     print(args)
16     print(kwargs)
17 
18 func1(1, 2, 3)
19 list_args = [1, 2, 3]
20 func1(*list_args)  # *将list里每一个元素当成参数传入函数
21 func1(list_args)  # 将整个列表当作一个参数传入函数
22 
23 dict_args = {"name":'John', 'age':18}
24 func2(**dict_args) # 将字典里每一个键值对当成参数传入函数
25 func2(k=dict_args) # 将整个字典当成一个参数传入函数
26 
27 func3(*list_args, **dict_args)
动态参数
 1 (1, 2, 3) <class 'tuple'>
 2 (1, 2, 3) <class 'tuple'>
 3 ([1, 2, 3],) <class 'tuple'>
 4 {'name': 'John', 'age': 18} <class 'dict'>
 5 name
 6 age
 7 {'k': {'name': 'John', 'age': 18}} <class 'dict'>
 8 k
 9 (1, 2, 3)
10 {'name': 'John', 'age': 18}
Result

posted on 2017-01-22 16:20  _Joshua  阅读(174)  评论(0编辑  收藏  举报

导航