一、全局变量和局部变量
- 二、参数
- 1.参数的类型
- 2.参数的传递
- 三、类
- 1.类的定义
- 2.构造函数
- 3.实例属性
- 4.实例方法
1.全局变量作用在定义的模块,降低函数通用性与可读性,一般用作常量,函数内要改变全局变量的值,用global进行声明
a=10#全局变量
def outer():
b=20#局部变量
global a#函数内改变全局变量的值
a=200
print(a)
print(b)
outer()
print(a)
结果:
200
20
200
2.局部变量在函数体内声明,效率比全局变量快,局部变量与全局变量同名,局部变量更有优先性
3.locals()用于打印全部的局部变量;globals()用于打印全部的全局变量
4.nonlocal关键字:用来声明外层的局部变量
def outer1():
b=10
def inner():
nonlocal b
print(b)
b=90
print(b)
inner()
outer1()
二、参数结果:
10
90
1.参数的类型
1.1位置参数:函数调用时,实参默认按位置传递,个数与形参需匹配
1.2默认值参数:有些参数的值是设置成默认值的,默认值参数必须在普通位置参数后
def f1(a,b,c=10,d=20): #c和d是默认值参数
print(a,b,c,d)
f1(1,2) #传进a和b的值
1.3 命名参数:按照形参名字传递参数,顺序可不一致
def f1(a,b,c):
print(a,b,c)
f1(c=3,b=2,a=1) #命名参数
1.4可变参数:*将多个参数收集到一个元组中,**将多个参数收集到一个字典中
def f1(a,b,*c):
print(a,b,c)
f1(1,2,3,4)
def f2(a,b,**c):
print(a,b,c)
f2(1,2,name='小明',age='18')
1.5强制命名参数:带星号的可变参数后面新增参数,必须是强制命名参数
def f3(*a,b,c):
print(a,b,c)
f3(1,2,3,b=4,c=5) #b,c必须强制命名
2.参数的传递:Python中参数的传递都是引用传递
2.1可变对象的传递:字典、列表、集合、自定义对象 ,直接传递地址
2896515708032
2896515708032
2896515708032
[10, 20, 30]
2.2不可变对象传递:数字、字符串、元组、function,赋值操作时,系统创建新对象
b=10
print(id(b))
def f1(m):
print(id(m))
m=m+20
print(id(m))
f1(b)
三、类结果:
2197555276368
2197555276368
2197555277008
1.类名采用驼峰原理,类中包含方法与属性
class Student:
def __init__(self,name,score): #self必须是第一个参数
self.name=name
self.score=score
def myscore(self):
print("{0}的分数是{1}".format(self.name,self.score))
s1=Student("小明",100)
s1.myscore()
结果:小明的分数是100
2.__init__()构造函数要点
2.1名称固定,必须为__init__()
2.2self必须为第一个参数,指代刚创建的实例对象
2.3通过“类名(参数列表)”调用构造函数
例:用s1=Student("小明",100)
3.类对象与实例对象:类对象只有一个,实例对象有多个
4.实例属性:每个实例对象保存一份
在构造函数中,self.实例属性名=初始值
在实例方法中,self.实例属性名
创建实例对象后: obj1=类名()
obj1.实例属性名=值
4.实例方法
语法:
def 方法名(self[参数列表]):
方法体
调用:对象名.方法名
class Country(object):
def __init__(self,name):
self.name=name
def ord_fun(self):
'''定义实例方法,至少一个self参数'''
print("实例方法")
@classmethod
def class_fun(cls):
'''定义类方法,至少一个cls参数'''
print("类方法")
@staticmethod
def static_fun():
'''定义静态方法,无默认参数'''
print("静态方法")
f1=Country("中国")
f1.__init__("江西")
f1.ord_fun()
f1.class_fun()
f1.static_fun()



