python小白笔记_面向对象、函数

别人的学习笔记

开篇灵魂自我拷问:

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
python 3.x含object

可操作的对象

__doc____doc____doc__
__module____module____module__
say_hellosay_hellosay_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']
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值