Python的基础性东西学习

我在想,四篇文章都没把这本书的前两章写完,是我写的太啰嗦了吗?这个进度是不是要快一点呢?还是就这样写吧!写下来主要是为了以后的自己看,还是得按照我这啰哩啰嗦的规矩来,哈哈。

Python的实用函数

这些函数在前几篇文章中都用过了,比如说帮助函数help(obj),把对象转为整数的int(obj),还有返回对象长度或元素个数的len(obj),还有打开文件用的open(fname,mode)函数,以及等待用户输入的raw_input(str)函数,其中str是用来展示的。还有三个是没有用过的函数,str(obj)这个是用来对象转字符串的,有时会把地址把对象的地址展示出来,这个和C#很像,还有就是type(obj)这个函数和C#的typeof()函数有一拼,另外还有一个就是dir([obj])这个函数返回的是对象的属性,这个函数好马婵呐!感觉应该不会常用吧,估计用不到吧!其实我不太明白它是干啥的!

被自己打脸是什么感觉

在上一段中我说dir([obj])函数没啥用,应该不常用,这个真是太打脸了。这个函数的用处和help()函数结合着用实在是太强大了,尤其是对新手来说更是如此。

如果不知道某个函数有哪些方法或者变量,就dir一下就知道这个函数的所有东西了,如果想知道这个函数的某个方法的作用的和用法,就help一下,就欧啦!突然感觉脸好疼啊!

Python好玩的语句和语法

  • 注释用符号#,这个前面几篇文章已经用过了,不再赘述,突然想到上一篇文章中有一个问题没有解决,这个问题就是Python为啥是特意强调静态成员变量呢?它有没有动态成员变量呢?这个问题一会再说。
  • 换行用符号\n,一般都是用这个符号进行换行,没啥说的。
  • 继续上一行\,这个就有点意思了,继续上一行的意思就是,代码写的太长了,一行放不下,需要用两行来写,这个时候就要用到\来连接了。
  • 两个语句显示在一行中用符号;,这个没啥说,因为C#就是这个样子。
  • 冒号:需要说一下,C#里是{},而Python里是冒号进行分割代码的头和体。
  • 代码缩进风格,这个Python对这一点是很严格的,也正因为如此,才使代码看着不乱,可以给人以美感。
  • 模块化,这个和C#差不多吧!

    Python为何特意强调静态成员变量?

    刚搜了一下,我有点消化不动了,因为我又看到了类静态方法,类方法,类实例方法,这三种方法先不说,先说为啥强调静态成员变量,对于这个问题,看一下代码就知道了。
class Person(object):
    children = []

    def setPersonChildren(self,childrenName):
        self.children.append(childrenName)

    def printPersonChildren(self):
        print self.children

person1=Person()
person2=Person()
person3=Person()

person1.setPersonChildren('zhangSan')

person1.printPersonChildren()
person2.printPersonChildren()
person3.printPersonChildren()
输出结果如下:
['zhangSan']
['zhangSan']
['zhangSan']

这样的输出结果是不是很不合理?zhangsan明明是给person1了啊!为啥person2,person3也有zhangsan呢?这让zhangsan情何以堪?但这说明了一个问题就是children这个成员变量被当作静态变量使用了,这也是为什么Python强调静态变量的原因了吧!但问题是,Python有没有动态的成员变量呢?有,必须有!

在说动态成员变量之前,需要再把上面的代码中添加一句话。

person1.setPersonChildren('zhangSan')
就只是添加了下面这句话
person1.setPersonChildren('lisi')

person1.printPersonChildren()
person2.printPersonChildren()
person3.printPersonChildren()
输出结果如下:
['zhangSan', 'lisi']
['zhangSan', 'lisi']
['zhangSan', 'lisi']

看,这个是赤裸裸的静态成员变量的用法对不对?现在应该很清楚的就明白了,它为什么是静态吧!下面说说怎么才能使其成为动态成员变量,还是看代码!

class Person(object):

    def __init__(self):
        self.children=[]

    def setPersonChildren(self,childrenName):
        self.children.append(childrenName)

    def printPersonChildren(self):
        print self.children


person1=Person()
person2=Person()
person3=Person()

person1.setPersonChildren('zhangSan')
person2.setPersonChildren('lisi')

person1.printPersonChildren()
person2.printPersonChildren()
person3.printPersonChildren()
这样就好了,输出结果如下:
['zhangSan']
['lisi']
[]

把成员变量放到init函数的self身上就变成动态成员变量了,是不是好简单呢?但是这对我来说确实是有点不适应啊!这个坑咱们是填完了,但填完一个坑,又来三个坑!下面看看这三个坑吧!

Python的类静态方法,类方法,类实例方法

  • 类静态方法
    这个方法和类没啥关系,无法访问类的任何属性(类属性,类实例属性),没有默认的第一个参数,就相当于是普普通通的一个方法,只是它需要@staticmethod来标记其为类静态方法,这个也就只是个标记,没别的意思。
  • 类方法
    第一个参数必须是类对象,可以通过这个类对象访问类属性,但是无法访问类实例对象,是不是有点绕口还不好记?其实啊,这个就相当于是说,可以访问类的静态成员,但是由于没有传实例对象,所以不能访问类的实例属性。需要说明的是,这个类方法需要用@classmethod标记。
  • 类实例方法
    第一个参数是类实例对象,是self,可以通过这个类实例对象访问类实例属性,可以通过类实例对象的__clsss__访问类属性。
    可以通过类对象调用类方法,类实例方法,但是不可以调用类的实例方法,不过只有类实例对象可以调用这三个方法

    三种方法的代码示例

class Person(object):
    children='zhangSan'

    def __init__(self,inst_name):
        self.name=inst_name

    def objMethod(self):
        print 'My name is',self.name

    @classmethod
    def classMethod(cls):
        print cls.children

    @staticmethod
    def staticMethod():
        print 'I am is StaticMethod'

Person.staticMethod()
Person.classMethod()

print '-----------------------------'
person=Person('wangWu')

person.staticMethod()
person.classMethod()
person.objMethod()

这个代码应该是比较清楚的吧!下面来看看代码的执行结果:

I am is StaticMethod
zhangSan
-----------------------------
I am is StaticMethod
zhangSan
My name is wangWu

这种文章不宜过长,就写到这里,一天学一点,日积月累,今天的Python就学到这吧!明天再来学Python,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值