一、Python的函数传递二、python类方法外部传参
一、Python的函数传递
a = 1
def fun(a):
print(“函数里”,id(a))
a = 2
print(“赋值后”,id(a), id(2))
print(“函数外”,id(a), id(1))
fun(a)
print(a)
函数外 1954180160 1954180160
函数里 1954180160
赋值后 1954180192 1954180192
1
可以看到,在执行完a = 2之后,a引用中保存的值,即内存地址发生变化,由原来1对象的所在的地址变成了2这个实体对象的内存地址。下面我们来看另一个例子:
a = []
def fun(a):
print(“函数里”,id(a))
a.append(1)
print(“函数外”,id(a))
fun(a)
print(a)
函数外 2066745607752
函数里 2066745607752
[1]
注意:
类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。
strings, tuples, 和numbers是不可更改的对象,而 list, dict, set 等则是可修改的对象。
当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象number,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象list,指向了列表的内存地址,因此调用并不会改变list内存地址.
二、python类方法外部传参
class MyClass:
“”“help myclass”""
x=123
def foo(self):
print(self.x)a = MyClass()
print(a.foo())‘’’
123
None
‘’’
注:
MyClass()实际上调用的是init(self)方法,可以不定义,如果没有定义会在实例后隐式调用。
作用:对实例进行初始化。
init()方法不能有返回值,也就是只能是None.
class Employee:
‘所有员工的基类’
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary)
employee = Employee(‘xiaomaili’,‘666’) #创建实例对象
访问属性:可以使用点号 . 来访问对象的属性。使用如下类的名称访问类变量:
employee.displayCount() # 访问对象的属性,返回Total Employee 1
employee.displayEmployee() # 访问对象的属性,返回Name : xiaomaili , Salary: 666
添加,删除,修改类的属性
employee.age = 7 # 添加一个 ‘age’ 属性
employee.age = 8 # 修改 ‘age’ 属性
employee emp1.age # 删除 ‘age’ 属性
‘’’
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
‘’’