别人的学习笔记
开篇灵魂自我拷问:
1、函数的定义 ? 答: 请看代码举例
2、函数的参数类型有哪些,区别是什么?形式参数、实际参数、默认参数、参数的顺序、动态参数.
答:形参 在没有调用的时候,是没有分配内存的。默认参数,参数顺序,动态参数请看代码举例。
3、函数有返回值吗?函数不写return时也有返回值,返回None(这是函数固有属性)。有return的时候返回的是return后面的值。
问:函数的返回值可以返回多个内容吗?
答:函数可以返回多个值。例如登陆成功后返回token和昵称, 定义2个变量来接受函数返回的2个值:
token,nickname=login()
4、变量作用范围:全局变量、局部变量的区别?
答:全局变量是针对一个python文件(一个python文件就是一个模块)。局部变量是针对函数,生命周期是针对函数的。
当全局变量、局部变量同名时,遵循“就近原则”。
#函数定义举例1
def func1():
pass
#函数定义举例2
def add(a, b):
print(a + b)
#函数调用举例2
add(2, 3)
'''形式参数的生命周期,什么时候内存释放。a,b没有被调用的时候,就是形式参数。被调用的时候实际参数就是2,3,形式参数a指向实际参数2, 形式参数b指向实际参数3'''
#参数的顺序是从左往右依次对应的举例3
def show(country, city, nickname):
print('来自{0}国家,城市是{1},昵称是{2}'.format(country, city, nickname))
#函数调用举例3
show('中国','广州','guangzhouhaha')
# 默认参数要放在非默认参数后面,否则会报错SyntaxError: non-default argument follows default argument
#def show(country='中国',city, nickname):
def show(city, nickname,country='中国'):
print('来自{0}国家,城市是{1},昵称是{2}'.format(country, city, nickname))
#默认参数调用举例4,可以赋值,也可以不赋值,不赋值就是默认的取值
show(city='武汉',nickname = 'wuhanhaha')
show(country='巴西',city='',nickname='')
#动态参数举例5:1个型号的是元祖( ),2个星号的是字典{ },注意列表是[ ]
def fun2(*args,**kwargs):
print(args,kwargs)
fun2((1,2,3),{'name':'hs'})
Python是动态语言,高级语言,面向对象的。
面向对象的思想
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
数据封装、继承和多态是面向对象的三大特点。
有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用 类名+(),类似函数调用的形式创建:
class Person(object):
pass
#由于Python是动态语言,对每一个实例,自由地给一个实例绑定各种属性并赋值
xiaoming = Person()
xiaoming.name = 'Xiao Ming'
xiaoming.gender = 'Male'
xiaoming.birth = '1990-1-1'
#给xiaohong加上的属性不一定要和xiaoming相同:
#现实世界中,一种类型的实例有相同属性。Person类创建的时候就有 name、gender、birth 属性怎么办?
xiaohong = Person()
xiaohong.name = 'Xiao Hong'
xiaohong.school = 'No. 1 High School'
xiaohong.grade = 2
#实例的属性可以像普通变量一样进行操作:
xiaohong.grade = xiaohong.grade + 1
注意:和其他语言的最大不同是:创建实例不用new。
class Person(object):
pass
p1 = Person()
p1.name = 'Bart'
p1.age=11
p2 = Person()
p2.name = 'Adam'
p2.age=7
p3 = Person()
p3.name = 'Lisa'
p3.age=8
L1 = [p1, p2, p3]
#python使用sort对列表(list)进行排序,说简单也简单说复杂也复杂,如果需排序的对象是比较复杂的实例,就要用到参数key,也就是关键词
# reverse参数实现倒序排列,reverse=True, python3 取消了sort方法中的cmp参数.
#lambda函数也叫匿名函数,可以省去定义函数的过程,让代码更加精简。冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。
L2 = sorted(L1 , key=lambda p1 : p1.name) #按照实例的name的升序排序
L3 = sorted(L1 , key=lambda p1: p1.age,reverse=True) #按照实例的aee 倒叙排序
print(L2[0].name)
print(L2[1].name)
print(L2[2].name)
print(L3[0].age)
python的class(类)中的_ini_是什么意思?
上面的代码,虽然可以自由地给一个person实例绑定不同属性,但一般,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就自动拥有 name、gender 和 birth 属性,怎么办?
在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
__init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),
后续参数则可以自由指定,和定义函数没有任何区别。(与其他语言的构造函数最大的不同)
相应地,创建实例时,就必须要提供除 self 以外的参数:
有了__init__()方法,实例化Person(name的值,gender的值,birth的值)就具有这3个 属性,属性的值可以自由指定。
class Person(object):
def __init__(self, name, gender, birth):
self.name = name
self.gender = gender
self.birth = birth
python的class(类)中的object是什么意思?
原文链接:https://blog.csdn.net/deeposcar/article/details/80947155
以下代码基于python 2.7.10版本,实际上在python 3 中已经默认就帮你加载了object了(即便你没有写上object)。
不继承object,类的命名空间只有三个对象可以操作.
继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性。
对于那些要着手写框架或者写大型项目的高手来说,这些特性就比较有用了,比如说tornado里面的异常捕获时就有用到__class__来定位类的名称,还有高度灵活传参数的时候用到__dict__来完成.
python 2.x不含object 可操作的对象 | python 2.x含object 可操作的对象 | python 3.x不含object 可操作的对象 |
__doc__ | __doc__ | __doc__ |
__module__ | __module__ | __module__ |
say_hello | say_hello | say_hello |
__class__ | __class__ | |
__delattr__ | __delattr__ | |
__dict__ | __dict__ | |
__format__ | __format__ | |
__getattribute__ | __getattribute__ | |
__hash__ | __hash__ | |
__init__ | __init__ | |
__new__ | __new__ | |
__reduce__ | __reduce__ | |
__reduce_ex__ | __reduce_ex__ | |
__repr__ | __repr__ | |
__setattr__ | __setattr__ | |
__sizeof__ | __sizeof__ | |
__str__ | __str__ | |
__subclasshook__ | __subclasshook__ | |
__weakref__ | __weakref__ | |
__dir__ | ||
__eq__ | ||
__ge__ | ||
__gt__ | ||
__le__ | ||
__lt__ | ||
__ne__ |
# -.- coding:utf-8 -.-
# __author__ = 'zhengtong'
#以下代码基于python 2.7.10版本
class Person:
"""
不带object
"""
name = "zhengtong"
class Animal(object):
"""
带有object
"""
name = "chonghong"
if __name__ == "__main__":
x = Person()
print "Person", dir(x)
y = Animal()
print "Animal", dir(y)
运行结果
Person ['__doc__', '__module__', 'name']
Animal ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',
'__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']