首页 > 代码库 > 【python】15、函数

【python】15、函数


一、函数




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、万能参数


【python】15、函数