python怎么

python怎么,第1张

python有两种运行方式:交互式和脚本式。交互式可以通过cmd命令行窗口或者IDEL实现,而脚本式通过写一个脚本(.py结尾的文档)实现。其中交互式主要用于简单的python运行或者测试调试python时用到,而脚本式是运行python程序的主要方法。

第一,交互式,通过Windows命令行工具进行交互式运行python。同时按下Windows键和R键,启动“运行”,在“运行”中输入cmd然后回车,即d出命令行工具,然后输入python回车,即出现如下界面。

第二,然后输入print('Helloworld!'),既可以敲一行代码,与python交互一次,python执行一次。

第三,通过IDEL交互式运行python。从“开始”中找到Python->IDEL,如下图。

第四,启动IDEL后,同样输入print('Helloworld!'),既可以敲一行代码,与python交互一次,python执行一次。只不过IEDL中python代码可以高亮显示。

第五,脚本式运行python,在IDEL中点击file->newfile,就会d出一个未命名(Untitled)的脚本窗口,然后输入如下代码,并按Ctrl+S保存。

Python面向对象编程之继承与多态详解

本文实例讲述了Python面向对象编程之继承与多态。分享给大家供大家参考,具体如下:

Python 类的继承

在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

我们先来定义一个class Person,表示人,定义属性变量 name 及 sex (姓名和性别);

定义一个方法print_title():当sex是male时,print man;当sex 是female时,print woman。参考如下代码:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person): # Child 继承 Person

pass

May = Child("May","female")

Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex) # 子类继承父类方法及属性

May.print_title()

Peter.print_title()

而我们编写 Child 类,完全可以继承 Person 类(Child 就是 Person);使用 class subclass_name(baseclass_name) 来表示继承;

继承有什么好处?最大的好处是子类获得了父类的全部属性及功能。如下 Child 类就可以直接使用父类的 print_title() 方法

实例化Child的时候,子类继承了父类的构造函数,就需要提供父类Person要求的两个属性变量 name 及 sex:

在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May 既是 Child 又是 Person)。但是,反过来就不行(Peter 仅是 Person,而不是Child)。

继承还可以一级一级地继承下来,就好比从爷爷到爸爸、再到儿子这样的关系。而任何类,最终都可以追溯到根类object,这些继承关系看上去就像一颗倒着的树。比如如下的继承树:

isinstance() 及 issubclass()

Python 与其他语言不同点在于,当我们定义一个 class 的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样。

Python 有两个判断继承的函数:isinstance() 用于检查实例类型;issubclass() 用于检查类继承。参见下方示例:

class Person(object):

pass

class Child(Person): # Child 继承 Person

pass

May = Child()

Peter = Person()

print(isinstance(May,Child)) # True

print(isinstance(May,Person))# True

print(isinstance(Peter,Child))# False

print(isinstance(Peter,Person)) # True

print(issubclass(Child,Person)) # True

Python 类的多态

在说明多态是什么之前,我们在 Child 类中重写 print_title() 方法:若为male,print boy;若为female,print girl

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person):# Child 继承 Person

def print_title(self):

if self.sex == "male":

print("boy")

elif self.sex == "female":

print("girl")

May = Child("May","female")

Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex)

May.print_title()

Peter.print_title()

当子类和父类都存在相同的 print_title()方法时,子类的 print_title() 覆盖了父类的 print_title(),在代码运行时,会调用子类的 print_title()

这样,我们就获得了继承的另一个好处:多态。

多态的好处就是,当我们需要传入更多的子类,例如新增 Teenagers、Grownups 等时,我们只需要继承 Person 类型就可以了,而print_title()方法既可以直不重写(即使用Person的),也可以重写一个特有的。这就是多态的意思。调用方只管调用,不管细节,而当我们新增一种Person的子类时,只要确保新方法编写正确,而不用管原来的代码。这就是著名的“开闭”原则:

对扩展开放(Open for extension):允许子类重写方法函数

对修改封闭(Closed for modification):不重写,直接继承父类方法函数

子类重写构造函数

子类可以没有构造函数,表示同父类构造一致;子类也可重写构造函数;现在,我们需要在子类 Child 中新增两个属性变量:mother 和 father,我们可以构造如下(建议子类调用父类的构造方法,参见后续代码):

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

class Child(Person):# Child 继承 Person

def __init__(self,name,sex,mother,father):

self.name = name

self.sex = sex

self.mother = mother

self.father = father

May = Child("May","female","April","June")

print(May.name,May.sex,May.mother,May.father)

若父类构造函数包含很多属性,子类仅需新增1、2个,会有不少冗余的代码,这边,子类可对父类的构造方法进行调用,参考如下:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

class Child(Person): # Child 继承 Person

def __init__(self,name,sex,mother,father):

Person.__init__(self,name,sex)# 子类对父类的构造方法的调用

self.mother = mother

self.father = father

May = Child("May","female","April","June")

print(May.name,May.sex,May.mother,May.father)

多重继承

多重继承的概念应该比较好理解,比如现在需要新建一个类 baby 继承 Child , 可继承父类及父类上层类的属性及方法,优先使用层类近的方法,代码参考如下:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person):

pass

class Baby(Child):

pass

May = Baby("May","female")# 继承上上层父类的属性

print(May.name,May.sex)

May.print_title() # 可使用上上层父类的方法

class Child(Person):

def print_title(self):

if self.sex == "male":

print("boy")

elif self.sex == "female":

print("girl")

class Baby(Child):

pass

May = Baby("May","female")

May.print_title()# 优先使用上层类的方法

1、If语句详解与实践

之前已经用过很多次If函数了,这边我再做一个简单介绍和一些新内容的补充吧,If函数的底层逻辑就是用来判断,如果满足条件则执行下面的语句。

基本的语法逻辑如下,注意记得写冒号及代码前的缩进:

if 条件:

代码1

else:

代码2

1

2

3

4

其中两个注意点,之前也提过了,就是缩进与英文格式的标点符号,有的时候,你忘记缩进或者冒号是中文格式的时候,程序就会报错,不过Pycharm和Spyder都会在那一行提醒你这一行的写法有问题,所以倒也不用太担心。

现在我们再来看看之前写过这个代码,是不是会感觉清晰很多呢。

score = 100

year = 2018

if (score <0) and (year == 2018):

print('录入数据库')

else:

print('不录入数据库')

1

2

3

4

5

6

我们下面再补充些内容,其实掌握上面的内容已经完全足够了,下面的只是作为一个知识点的补充。比如你考试考了80分,最简单的是:

score = 85

if score >= 60:

print('及格')

else:

print('不及格')

1

2

3

4

5

我相信现在大家看这个代码已经完全没有问题了,输出肯定是‘及格’。那如果我除了想判断是否及格外,还想看它是否优秀(大于80分),则输出‘优秀’,该怎么弄呢。

score = 55

if score >= 80:

print('优秀')

elif (score >= 60) and (score <80):

print('及格')

else:

print('不及格')

1

2

3

4

5

6

7

这边唯一的一个不同,就是中间加入了一个elif,这个其实就是elseif的缩写,用来提供多个结果使用的,

其实这个我做项目的时候基本没有用过,大家简单了解下即可。

2、For语句详解与实践

For语句之前有提到过一次,它的重要程度可以说仅次于If语句了,它的底层逻辑是循环,其实While的底层逻辑是循环,不过还是For用的更加普遍些。

For语句的常见使用格式为,注意记得写冒号及代码前的缩进:

for i in 区域:

代码

1

2

先举个之前讲列表的时候讲过的例子:

class1 = ['丁一', '王二麻子', '张三', '李四', '赵五']

for i in class1:

print(i)

1

2

3

用大白话来说就是:

列表class1 = ['丁一', '王二麻子', '张三', '李四', '赵五']

对于class1中的所有元素i:

我们都把它打印输出出来

1

2

3

这个输出代码为:

丁一

王二麻子

张三

李四

赵五

1

2

3

4

5

这个i可以换成任何东西,比如你换成j,换成一个字符串,只要和下面的print()里面的内容匹配即可。

比如我们可以写:

class1 = ['丁一', '王二麻子', '张三', '李四', '赵五']

for haha in class1:

print(haha)

1

2

3

这样输出的结果其实是一样的。

For语句还通常与range()函数合用,range函数的话其实就是一个类似于list的东西,只不过它可能更像list的长度,你想循环多少次,在range的括号里填写几就可以,比如我写for i in range(3),那么它就是循环3次:

for i in range(3):

print('hahaha')

1

2

这个它就会输出三行‘hahaha’。

我担心大家可能会对这个for i in range(3)中的i还有疑惑,刚刚i不是代表列表里的每一个元素吗,这边这个i又是什么意思呢?这边我给大家做一个偷懒的总结:

(1)对于"for i in 区域"来说,如果说这个区域是一个列表,那么那个i就表示这个列表里的每一个元素;

(2)对于"for i in 区域"来说,如果说这个区域是一个range(n),那么那个i就表示0到n -1这n个数字,之前提到过,python中序号都是从0开始的,所以这边也是从0开始,到n - 1结束。

(3)对于"for i in 区域"来说,如果说这个区域是一个字典,那么i表示的就是字典的中的键(了解即可,很长一段时间用不到)

还有个非常重要的知识点:for i in range(5)的话,它的确会循环5次,但要注意,在python中,第一个元素的序号其实是0,所以如果我们输入如下代码:

for i in range(5):

print(i)

1

2

那么输出的结果是从0开始的,也就是0到4

0

1

2

3

4

1

2

3

4

5

这时候你可能要问,这玩意有什么用?下面我就以舆情监控中的实战来给大家讲解下for语句在爬虫实战中的应用:

title = ['标题1','标题2','标题3','标题4','标题5']

for i in range(len(title)): #len(title)表示一个有多少个新闻,这里是5

print(str(i+1) + '.' + title[i]) #这个其实把字符串进行一个拼接

1

2

3

上面这几行代码已经很大程度就是你做项目实战用到的代码了,暂时看着有点晕也没有关系,我在教学视频里会详细介绍下的。我先用大白话来解释下这几行代码在干嘛:

爬到了一些新闻标题,放到了title这个列表里

用len(title)来获取一共有多少条新闻,并利用for和range语句来进行循环:

打印输出新闻标题,并且在前面加上序号

1

2

3

输出结果如下图所示:

其中有几个小注意点,

(1)range(len(title))这边就相当于range(5),因为len(title)就等于5,所以for i in range(len(title))就是循环5次,这里的i就表示数字0-4。

(2)为什么要写str(i + 1),因为我们要标序号,'标题1’是字符串形式的,而i是数字,我们讲过数字和字符串不能直接相加,所以要用str函数进行下转换。

(3)至于为什么不是str(i),而是str(i + 1)。是因为之前讲列表的时候提到过,在编程中,第一个序号都是0,比如之前列表里讲过的class1[0]表示“丁一”一样,这边如果写str(i)的话,那么输出的第一个序号就是“0.标题1”了。

(4)因为这里的i就表示数字0-4,title[i]的话,表示列表中的第i+1个元素,所以title[0]的话就表示第1个元素,title[4]就表示第5个元素。

通过for循环和range()函数和len()函数的联合使用,可以同时打印多个列表中的元素,代码如下:

# 在实战中的应用(可以同时打印多个列表中的内容)

title = ['标题1', '标题2', '标题3', '标题4', '标题5']

href = ['网址1', '网址2', '网址3', '网址4', '网址5']

for i in range(len(title)): # len(title)表示一个有多少个新闻,这里是5;这里的i就表示数字0-4

print(str(i+1) + '.' + title[i]) # 这个其实把字符串进行一个拼接

print(href[i])

1

2

3

4

5

6

3、While语句详解与实践

While的底层逻辑也是循环,它和For的特点不一样,最大的区别是For知道循环次数,而While的话则是不清楚循环次数。

其使用格式为,注意要写冒号以及代码前的缩进:

while 条件:

要执行的的代码

1

2

举个例子给大家看下:

a = 1

while a <3:

print(a)

a = a + 1 #或者写成 a += 1

1

2

3

4

它白话的意思就是:

首先将1赋值给a

当 a 小于3的时候:

打印输出a

a 在原来的基础上加上1

1

2

3

4

a一开始等于1,满足小于3的条件,会打印输出1,然后a加上1等于2,此时a仍然小于3,所以仍然会执行打印输出的命令,此时打印输出2,然后a在2的基础上加上1等于3,此时a已经不满足小于3的条件了,那么循环此时便终止了。最后输出如下:

1

2

1

2

大家可以试着把数字3换成别的数试试看。

其实我们之后大多情况下用到While的时候,就是让While来一直循环(如果用for i in range(n),无论n多大,那么早晚都有结束的时候),这个在爬虫实战中的具体应用是:当每爬完一次,就自动进行下一次爬取,实现24小时不间断爬取。那么While如何能实现一直循环呢?

具体的方法其实很简单,那就用while True进行永久循环。

while True:

代码块

1

2

给大家截个图看下,下面这张图就是最终的代码效果,这个while True就是舆情监控系统实现24小时不间断爬取的秘诀,有个注意点,这个True得大写首字母,之后讲到的时候再详细介绍:

大家如果想停止while True的不停的循环,可以在点击右上角的红色终止按钮即可。我当初自己学的时候,写过这么两行代码


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11842124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存