测试嵌套函数的定义
#测试嵌套函数的定义
def outer():
print('Outer is running')
def inner():
print('Inner is running')
inner()
outer()
print('*'*10)
def printName(IsChinese,name,familyname):
def inner_print(a,b):
print('{0} {1}'.format(a,b))
if IsChinese:
inner_print(familyname,name)
else:
inner_print(name,familyname)
printName(True,'小七','高')
printName(False,'Ivanka','Trump')
运行结果:
Outer is running
Inner is running
**********
高 小七
Ivanka Trump
测试nonlocal、global的用法
#测试nonlocal、global的用法
a = 100
def outer():
b = 10
def inner():
nonlocal b
print('inner b:',b)
b = 20
global a
a = 1000
inner()
print('outer b:',b)
outer()
print('a:',a)
运行结果:
inner b: 10
outer b: 20
a: 1000
类
class Student:
def __init__(self,name,score): #构造方法
self.name = name
self.score = score
def say_score(self): #self必须位于第一个参数
print('{0}的分数是:{1}'.format(self.name,self.score))
s1 = Student('gaoqi',18)
s1.say_score()
s1.age = 32
s1.salary = 3000
print(s1.salary)
s2 = Student('高希希',100)
s2.say_score()
Student.say_score(s2)
print(dir(s2))
print(s2.__dict__)
class Man:
pass
print(isinstance(s2,Man))
运行结果:
gaoqi的分数是:18
3000
高希希的分数是:100
高希希的分数是:100
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_score', 'score']
{'name': '高希希', 'score': 100}
False
面向对象编程OOP
class Student:
company = 'SXT' #类属性
count = 0
def __init__(self,name,score):
self.name = name #实例属性
self.score = score
Student.count = Student.count + 1
def say_score(self):
print('我的公司是:',Student.company)
print(self.name,'的分数是:',self.score)
s1 = Student('张三',80) #s1是实例对象,会自动调用__init__()方法
s1.say_score()
s2 = Student('高崎',90)
print('一共创建{0}个Student对象'.format(Student.count))
运行结果:
我的公司是: SXT
张三 的分数是: 80
一共创建2个Student对象
测试类方法、静态方法
class Student:
company = 'SXT'
@classmethod
def printCompany(cls):
print(cls.company)
Student.printCompany()
class Student2:
company = 'SXT'
@staticmethod
def add(a,b):
print('{0}+{1}={2}'.format(a,b,(a+b)))
return a+b
Student2.add(20,30)
运行结果:
SXT
20+30=50
析构函数
#析构函数
class Person:
def __del__(self):
print('销毁对象{0}'.format(self))
p1 = Person()
p2 = Person()
print(p1)
print(p2)
del p2
print('程序结束')
# print(p1)
# print(p2)
运行结果:
<__main__.Person object at 0x000001D6D8050BA8>
<__main__.Person object at 0x000001D6D8069DA0>
销毁对象<__main__.Person object at 0x000001D6D8069DA0>
程序结束
销毁对象<__main__.Person object at 0x000001D6D8050BA8>
测试可调用方法__call__()
#测试可调用方法__call__()
class SalaryAccount:
'''工资计算类'''
def __call__(self,salary):
print('算工资啦...')
yearSalary = salary*12
daySalary = salary//22.5
hourSalary = daySalary//8
return dict(yearSalary=yearSalary,monthSalary=salary,daySalary=daySalary,hourSalary=hourSalary)
s = SalaryAccount()
print(s(30000))
运行结果:
算工资啦...
{'yearSalary': 360000, 'monthSalary': 30000, 'daySalary': 1333.0, 'hourSalary': 166.0}