python极简入门

您所在的位置:网站首页 python极简教程 python极简入门

python极简入门

2023-10-28 03:44| 来源: 网络整理| 查看: 265

前言

在我接触的所有语言里,python是最容易入门的了。因为它结构简单;语言逻辑接近自然语言;没有主函数;没有指针;而且只需编写一个页面,无需考虑多个页面的交互;无需定义变量,这意味着程序员可以不用学习繁琐的数据类型,以及它们之间微妙的差别,以及各种类型转换方法,及这些方法间的差别;它还有很多功能强大的库,基本囊括了你需要的一切函数,使你往往可以不用考虑一些复杂的实现,而可以仅仅使用黑箱子一般的库函数就可以。 程序员界有一句著名的调侃:“我有一个价值一个亿的创意,只差一个资深程序员了。”但在我看来,学习python,或许你自己就可以成为后者。

变量定义

python的变量定义是非常容易的,因为它并不需要定义变量。我们只需要在使用时编出一个符合规定的名字,再赋予它我们想要的值即可:

box = "orange" number = 10

这行语句告诉我们,有个箱子变量,它的值为橘子。有个数目变量,它的值为10。而变量的数据类型,也在这一刻确定了,之后即使给出其它类型的值,它也会转化为string类型;

布尔变量

布尔变量是指值域为"True"和”False“两种的变量,一般用于循环结构或分支结构的判断上:

hungry = True BoxEmpty = False while hungry : if !BoxEmpty : EatBox()

//!表示取反值,!True=False,!False=True. 只要(while)肚子饿(hungry = True),如果(if)箱子里的东西没吃完(BoxEmpty = False) ,就一直吃下去(EatBox())。

条件语句

if称之为条件语句,它后面伴随的往往是一个布尔变量或结果为布尔值的语句(即可以明确其结果真假的语句)。这个变量或语句之后是一个”:“,表示,如果这个变量或语句的值为真,那么就执行:后的语句。

if !BoxEmpty : EatBox()

如果我们想设计判定为假的动作,就可以使用else语句:

else : FillBox()

如果箱子空了,就想办法把它填满。

有些时候事情可能的情况不止两种,这种情况下就要用到elif语句:

if answer == apple : print ("wrong,not apple!") elif answer == watermelon : print ("wrong,not watermelon!") elif answer == pear : print ("wrong,not pear!") ... elif answer == orange : print ("Right,it’s orange!") else : print(”That‘s not fruit!")

要猜箱子里装的是什么水果,是苹果吗?不是的话,是西瓜吗?不是的话,是梨吗?…不是的话,是橘子吗? 在这种问题里,elif是非常合适的。else也可以使用,作为其余假设都不正确时的缺省(default)选项。

循环语句

循环语句是当我们在进行重复工作时的好工具,它分为while和for两种。除了名字外,这二者还有一些微妙的差别: while使用布尔变量或结果为布尔值的语句作为循环判定条件,如果某布尔变量或语句判定对,就执行下去:

while hungry : if !BoxEmpty : EatBox()

如果饿,就一直去箱子里找吃的。 for则用于数组或后面讲到的list、turple和dictionary的遍历:

for number in range(2,4): EatBox(number)

把箱子里第3到5个东西吃掉。

字符串

string类型的变量称之为字符串,用”“及之间的内容表示:

box = "orange"

string可以做简单的加法,效果是把两个字符串连接在一起:

sent1 = "The box is" sent2 = "full!" print(sent1+sent2) 结果是 The box is full! List变量

list能够同时存储各种类型的变量,可谓人如其名,是个名副其实的列表。如果想定义一个列表变量,只需在多个变量的两边用[ ]围住,且变量间用,隔开:

MyList = ["orange",10,WhetherBuy]

如果想要list中表示某一特定位置的元素,只需在变量名后加上用[]包裹的元素位置即可:

number = MyList[1] print(number) 结果是 10

如果想要改变list值,只需重新给欲改变的元素赋值即可:

MyList[1] = 5 print(MyList[1]) 结果是5

与list相似的还有tuples变量,它与list的唯一差别在于,list可以改变变量值,而它不行,相当于是const list。

list和tuples可以相互转化,只需用tuples()和list()即可。

函数

函数是抽象化的一个处理活动,它包含函数定义,函数输入,函数处理,函数输出四个部分,其中除了函数定义外,其它三个都是可以没有的。 下面是一个典型的函数实例:

def GuessWhatsInIt(answer): guess = False if answer == apple : print ("wrong,not apple!") elif answer == watermelon : print ("wrong,not watermelon!") elif answer == pear : print ("wrong,not pear!") ... elif answer == orange : print ("Right,it’s orange!") guess = True else : print(”That‘s not fruit!") return guess

def是函数定义的起手式,是告诉编译器,你接下来要定义一个函数了;GuessWhatsInIt是这个函数的名字;answer是这个函数的输入变量,可以有一个,也可以有零或多个。如果有多个,变量名间用,隔开;return是函数输出,代表函数的结果,如果不需要输出,可以省略。 我们还可以在函数的定义里使用其它我们定义的函数,但要注意,和变量不同,一个函数在使用前必须被定义,否则编译将会失败。

dictionaries

dictionaries变量和list及tuples变量很像,它和这二者的区别在于,后者使用数字作为索引,而前者使用关键字(key)作为索引:

numbers = {"one":"un","two":"deux"} print(numbers["one"]) 结果是un 类

类是面向对象语言的特色功能,它的优点在于抽象性、封装性和可继承性。抽象性表现在,因为一个类中往往包含了变量及定义在这些变量间的操作,因此它可以很好的表示抽象问题和抽象世界;封装性表现在,类的访问受到严格的、分层级的保护,对权限最低的用户而言,一个类就像一个黑箱子,你可以完全不了解它如何运作,只需知道输入什么值可以得到什么结果即可。这保证了类的安全性;可继承性是指,我们可以创建一个类,并让它继承另一个类的数据及函数定义,并在这基础上进行小的改编。这不但有利于抽象性(比如真实世界的分类往往是分层级的,每一层都有其独特的特点,继承可以完美表现出这一特点),也有利于封装性,因为我们可以给不同的层级设定不同的保护措施,在保证类的安全性的同时,也能兼顾灵活性。 比如这是一个类的定义:

class box: def GuessWhatsInIt(answer): guess = False if answer == apple : print ("wrong,not apple!") elif answer == watermelon : print ("wrong,not watermelon!") elif answer == pear : print ("wrong,not pear!") ... elif answer == orange : print ("Right,it’s orange!") guess = True else : print(”That‘s not fruit!") return guess

然而这只是一个定义,我们如果想要使用类的功能,就必须给它定义一个实例(instance):

MyBox = Box()

如果想调用类中的数据或函数,则要在实例名后加上.以及想要调用的数据或函数名:

MyBox.Box = "apple" print(MyBox.GuessWhatsInIt(orange)) 结果是False

类中有一种特殊的函数,称之为初始化函数:_init_:

class box: def _init_(self): self.Box = "orange" box b print(b.Box) 结果是 orange

这个初始化函数里的self有点类似c++里的this指针,都是指代了当前的类。在创建类时,初始化函数就自动运行,并按照其程序内容进行相应的初始化操作。其形参可以不止一个。

类的继承比较简单,只需在定义要继承其它类的类时,在其类名后加上(),括号内填写想继承的类的类名:

class RectangleBox(box): ...

此时box类里的数据及函数就自动被RectangleBox类继承了,RectangleBox类可以自由地使用这些数据和函数。我们称box为父类,RectangleBox为子类。 如果父类中的某些函数不符合子类的功能,那么可以在子类中定义一个完全一致(函数名,形参名称、类型、数量及顺序完全一致)的函数,子类的这个函数就会代替父类函数的作用,我们称之为重写(overriding)。

库和包裹

库是一个包含了各种python代码的文件,python有很多很有用的库,我们只需要提前下载好,放到对应路径,并使用import功能引入即可:

import numpy from *

这是指,引入numpy库中的所有(*)函数,如果只需要其中的一部分,则只需要在from后写清要引入的函数名即可。 有时候我们处于方便等目的,需要将引入的库改名,这时只要在库名后面加上as和欲改的名即可:

import numpy as n from *

我们也可以自己创建库,只需要写好函数,然后保存为.py文件,然后存储到相应路径即可。这样的库也可被引入。 我们把相似的库放到一个文件夹里,并加上一个_init_.py文件。这个文件基本没有任何功能,也被要求尽量不要在内部写任何代码。它的最大的作用就是用来被python识别这个文件夹为一个package。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3