1、嵌套函数定义:
def f1():
print('f1 running……')
def f2():
print('f2 running……')
f2()
f1()
内部函数只能在内部调用才有用。
2、nonlocal关键字
(1)nonlocal用来声明外层的局部变量。
(2)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
3、对象和类
class Student: #类名一般首字母大写,多个单词采用驼峰原则
def __init__(self,name,score): #self必须位于第一个参数
self.name = name #实例属性
self.score = score #实例属性
def say_score(self): #self必须位于第一个参数 #实例方法
print('{0}的分数是:{1}'.format(self.name,self.score))
s1 = Student('lucy',100)
s1.say_score()
输出:lucy的分数是:100
4、构造函数__init__:初始化传建好的对象,初始化指的是:“给实例属性赋值”。
def __init__(self,name,score): #self必须位于第一个参数
self.name = name
self.score = score
5、实例方法:
def 方法名(self [,形参列表]):
函数体
方法的调用格式如下:
对象.方法名([实参列表])
6、类方法和静态方法
class Student: #类名一般首字母大写,多个单词采用驼峰原则、
company = 'SXT' #类属性
def __init__(self,name,age): #self必须位于第一个参数
self.name = name
self.age = age
@classmethod #类方法
def printCompany(cls): #self必须位于第一个参数
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
7、__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}