一、函数
3、对于Python的函数,我们需要记住的是
1)函数的默认返回值是None。
2)python是一个自上而下逐行解释并执行的语言。因此,函数的定义必须在函数被调用之前。同名的函数,后定义的会覆盖前面定义的。
3)程序执行的时候,遇到函数定义只会先将函数整体读进内存,并不立刻执行。等到函数被调用的时候才执行函数体。
4)python函数的参数传递的是值传递还是引用传递。
函数参数传递本质上和变量整体复制一样,只是两个变量分别为形参a和实参b。那么,a=b后,a变了,b值是否跟着变呢?这取决于对象内容可变不可变
值传递:
指在调用函数时,将实际参数复制一份传递给函数,函数对参数进行修改将不会影响到实际参数
适用于不可变对象(如int, str,tuples等)作为参数传递时,例如元组
引用传递:
指调用函数时,将实际参数的地址传递给函数,函数对参数进行修改,将影响实际参数
适用于可变对象(如list,dict,类的实例等)作为参数传递时,例如列表
浅复制:(也叫影子复制)
只复制父对象,不会复制对象的内部的子对象
深复制:
复制对象及其子对象
赋值是引用传递
In [74]: l1 = [1, 2, 3] In [75]: l2 = l1 In [76]: l2 Out[76]: [1, 2, 3] In [77]: l3 = l1.copy() In [78]: l3 Out[78]: [1, 2, 3] In [79]: id(l3) # l3和l1应用的是不同内存对象 Out[79]: 140149284135624 In [80]: id(l1) Out[80]: 140149295996616 In [81]: id(l2) # l2和l1引用的是同一个内存对象 Out[81]: 140149295996616
这点很重要:
def f1(a_list): s = id(a_list) a_list[0] = 5 print(s) print(a_list) li = [1,2,3,4,] f1(li) print(id(li)) print(li)
运行结果:
11797576 [5, 2, 3, 4] 11797576 [5, 2, 3, 4]
二、函数的参数
对于函数,最重要的知识点莫过于参数了。
参数分为形式参数(形参)和实际参数(实参)。
def f1(a, b, c): pass f1(1, 2, 3)
其中,a,b,c就是形参,1,2,3就是实参,也就是实际要传递的参数。
通常在传递参数的时候我们按照参数的位置,逐一传递,这叫“位置参数”。
而有时候我们会用“形参名”=“值”的方式传递参数,这叫“关键字参数或指定参数”。
Python中的形式参数有以下几种:
1、位置参数
2、关键字参数
3、默认参数
4、动态参数
5、万能参数
原文:http://xiexiaojun.blog.51cto.com/2305291/1933671