标识符
在Python中,为了方便使用,你经常需要给一些变量和常量等数据取名字。这个名字就叫标识符,允许使用字母、数字和下划线来组成。取名字的时候也不能瞎取,要注意两点:
1. 开头不能是数字
你大可使用字母、数字、下划线来构成一个标识符,甚至是随便混和使用。但是要注意不能以数字开头,因为会引起歧义。比如在你看来 5E3 完成可以当作一个普通的变量名,但是在计算机看来这也可能是科学计数法下的 5*10^3 ,为了避免让计算机懵逼,Python便做了一个禁止以数字开头命名标识符的规定。
2. 不能使用Python关键字
Python关键字是啥?就是系统预设的一些保留字,他们在Python中起着各式各样的功能。Python手下有35个元老,身怀绝技又各不相同。当一个项目需要他们绝活的时候会直接叫一个名字,相应的元老就会出来发挥他们的特长了。但如果有重名的现象,叫名字的时候两个元老都会比较懵逼。
所以Python为了避免这种尴尬,也事先规定:Python里这35个元老的名字,谁也不能用。
我们可以执行一个这样的命令,来看看这35个元老的名单:
#import也属于35元老之一,他的作用是引用。在这里就是引用keyword这个模块
import keyword
# 这里的意思是用keyword的模块来引用所有的关键词
keyword.kwlist
#按下回车 得到以下结果:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
为方便显示,我将着35个保留字摘录如下:
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
上面的列表就是35个Python保留字,记着给标识符取名的时候别撞名啦。
注释
那上面那些 # 是干啥的呢?是用来给代码注释的,请大胆使用。因为在 # 后用来注释的内容在运行的时候均会被Python忽视。当注释文字较少时我们可以在注释文字前加一个 # ,当注释内容较多的时候我们可以用一对 ‘’’ 或者 “”" 来标注,例如:
"""
在中间写的任何东西都不会干扰代码的执行
在这里你可以写下关于前后代码的作用,方便以后在改代码的时候查找
"""
导入模块与函数
在刚才的代码中,我们注意到有一个 import 函数,与之对应的还有一个 from … import 函数,在本文中有必要介绍一下这两个导入函数。在Python中我们使用 import 和 from … import 来导入相应的模块。在这里我们用涵盖所有数学运算的 math 模块来举例子:
当我们想引入整个Math模块时,我们用 import 模块名 来导入:
>>>import math
当我们只是想把Math模块下某个函数导入,例如可以求正弦值的sin函数,我们可以用 from 模块名 import 函数名:的方式来导入:
>>> from math import sin
当我们想把Math模块下多个函数都导入时,可以使用 from 模块名 import 多个函数名(用英文逗号分隔) 的方式:
>>> from math import sin, tan, log
当然只要我们想我们也可以用 from 模块名 import * 将Math函数下的全部函数导入:
>>> from math import *
这里需要注意的是, from 模块名 import * 和 import 模块名 都可以将某个模块下的所有函数导入,但是引用函数的格式却各不相同:
在 import 模块名 下引用函数,需要使用 模块名.函数名() 的方式:
>>> import math
>>> math.sin(75)
-0.38778163540943045
而在 from 模块名 import * 的引用方式下,则可以直接使用:
>>> from math import *
>>> sin(75)
-0.38778163540943045
但是引用模块下整个函数时,有时会出现内置函数与用户自定义函数重名的情况导致运行错误,所以还是建议用什么函数导入什么函数比较好。
基本数据类型
如果把Python看成一个大企业,除了刚才提到的35位元老,还有6个部门。Python公司内的所有员工都可以被归到六个部门之一,六个部门下的部员们都有着属于他们部门的制服,一目了然。这六个部门分别是: Number(数字) 、 Set(集合) 、 String(字符串) 、 List(列表) 、 Tuple(元组)
和 Dict(字典) 。
数据类型的简单介绍
下面将简单介绍一下六类数据类型,这次只是为了先让大家眼熟它们长啥样,具体的内容和存在的疑问我们将分别在以后的文章内单独介绍它们。
1. Number(数字)
在 Number(数字) 这个大部门下,还有四个分队分别是: int(整数) 、 float(浮点型) 和 complex(复数) 。
a. Int整数型:就是整数,像12315、996等。
b. Float浮点型:就是带小数点的数,例如 13.7、18.0等。
c. Complex复数:即由数字和 j 两部分构成,例如 -1.23 + 3.21j 、0.0+0.0j 等。
例如:
>>> a = 12345 #这是整数型
>>> b = -123.45 #这是浮点型
>>> c = -12.3+4.5j #这是复数型
2. String(字符串)
Python种的字符串用单引号或双引号括起来,例如:
>>> a = 'Think #可以用单引号
>>> b = "THINKING" #也可以用双引号
3.List(列表)
List是Python种使用最频繁的数据类型,是序列的一种。它的特征主要为:列表内的元素写在方括号 [] 之间,由逗号分隔:
>>> a = [12, 45, 'Think'] #List内可以包含多种数据类型
4.Tuple(元组)
Tuple与List相似,元组内的元素写在小括号 () 之间,元素之间用逗号分隔:
>>> a = (37.2, 'But') #Tuple内部也可以包含多种数据类型
5.Dict(字典)
Dict与Tuple、List都属于对象集合的一种,字典当中的所有元素都是通过键来存取。字典内的元素写在大括号 {} 里面,它是一个无序的关于 键:值 的集合:
>>> a = {'John':75, 'Izie':87, 'Kara':92}
6.Set(集合)
set由一个或多个整体组成的,Set里的元素写也在大括号 {} 里,也可以用过 set() 的方式来创建:
>>> a = {value1, value2}
>>> set(value)
刚才我们和Python中的六个部门老大见了第一面,现在我们还要顺便知道他们的派别:这六类数据类型基本可以分为顽固派和维新派两派。
“顽固派”的数据类型一旦创建不可更改,除非重新定义。
“维新派”的数据类型创建后也可以随意删减、更新等。
我们在这篇文章中先只知道两派的人员名单即可:
顽固派:Number(数字)、String(字符串)、Tuple(元组)
维新派:List(列表)、Dictionary(字典)、Set(集合)
记住这两个派别,这是Python中一个影响深远的设定。
数据类型的转化
另外还要知道的一点是:不同部门下的部员们,是可以跳槽到别的部门的。只需要用Python内置的几个数据类型转换函数即可:
1. 简单转化:
浮点和整数之间的转化: int() 、 float()
创建一个复数: complex(x,y)
>>> int(12.99)
12 #由结果我们可以看到整数转化并非四舍五入,而是直接舍弃掉小数点后的内容
>>> float(12)
12.0 #整数则转化为添加小数点后一位
2.序列之间的转化
让其他序列以元组的方式显示: tuple()
让其他序列以列表的方式显示: list()
让其他序列以可变集合的方式显示: set()
让其他序列以不可变集合的方式显示: frozenset()
a. 让其他序列以元组的方式显示:
>>> a = [1, 2, 3]
>>> tuple(a)
(1, 2, 3)
b. 让其他序列以列表的方式显示:
>>> b = (4, 5, 6)
>>> list(b)
[1,2,3]
c. 让其他序列以可变集合的方式显示:
>>> c = [1, 8, 3]
>>> set(c)
{1,8,3}
d. 让其他序列以不可变集合的方式显示:
>>> d = [1, 7, 4, 0]
>>> frozenset(d)
frozenset({1, 7, 4, 0})
3.其他转化
将一个整数转换为对应的ASCII字符: chr()
将一个字符转换为对应的十进制整数: ord()
将一个整数转化为十六进制字符串: hex()
将一个整数转化为八进制字符串: oct()
a. 将一个整数转换为对应的ASCII字符:
>>> chr(97)
'a'
b. 将一个字符转换为对应的十进制整数:
# ord函数和上面的chr函数配对:
>>> ord('a)
97
# 它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值
>>> ord('9')
57
# 如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
>>> ord('125')
TypeError: ord() expected a character, but string of length 3 found
c. 将一个整数转化为十六进制字符串:
>>>hex(255)
'0xff'
d. 将一个整数转化为八进制字符串:
>>> oct(15)
'017'
这里需要知道的是,刚才所谓的转化方式都是将原来的内容以指定方式显示一遍,并没有在原数据上直接改,原数据不会发生变化:
>>> a =[1,2,3] # 创建一个名为a的list
>>> tuple(a) # 将a用tuple方式显示
(1,2,3)
print(a)
[1,2,3] # a还是list
代码块和代码组
有接触过C语言的小伙伴会知道,在C语言中使用 { 和 } 来表示一个代码块。所谓代码块,即在范围内的所有代码将作为一个整体来运行,它大体长这个样:
如果满足条件xxxx的话:
先执行balabala…
再执行balabala…
然后输出balabala……
如果不满足条件xxxx的话:
直接输出balabala……
图中标注的就是两个代码块,可以看到一行代码也可以构成代码块。
除了代码块,Python中还有代码组这个概念,是由缩进相同的一组语句构成的代码块,例如:
如果满足这个条件:
执行这一行的命令
如果不满足上面那个条件:
就执行这个命令
如果上面两个条件都不满足:
只好执行这个命令
上面这样,由多个缩进相同的代码块组成的就是代码组。
语句的单、多行显示:
有时候我们输入的语句可能会很长怎么办?我们可以使用 \ 来分割语句组成多行语句:
注意是 \ ,不要和 / 弄混了。往往在 Enter 键上方。
既然可以将一行语句拆成多行,那可不可以把多行语句输在一行?当然可以,只需要在每两个语句之间加个分号 ; 分开就好了。例如:
a=12;b=13;c=a+b;print©
空行问题
在Python中可以打出一些空行来作为分隔两段功能不同的代码,便于日后代码的维护或重构。这里要单独说两点:
1.空行不属于Python语法的一部分:这就意味着,有空行和没空行都不会影响代码的运行。有些时候加入适当的空行会提高以后你读代码的可读性,但是你不加空行对程序本身也没有任何问题。
2.空行属于程序代码的一部分:空行不代表它不存在,只是这一行的内容为空。就像一本记满内容的本子,中间有一页空白不意味着这一页不属于这个本子了,而且这也空页也有相应的页码。
3.在Python中空行也计入行数,例如:
>>> # 这是第n(n∈N)行代码
>>>
>>>
>>> # 这是第n+3(n∈N)行代码
最后,这里准备以Python中两个最基础的操作结束本文:
Print输出和input输出
Print输出函数:
print为输出函数,格式为: print(‘输出内容’) ,例如我们要显示出 ‘开始学习Python’ 这个内容:
>>> print ('开始学习Python')
'开始学习Python'
注意: print 里面的内容需要用单引号括起来,逗号代表分隔。
input输入函数:
input为键入函数,使用方法为 标识符 = input(‘输入提示语’) 。
试着写写吧:我的第一个爬虫!
编程的入门往往总是无聊的,太多理论知识而没有“我也能做出个什么来”这种有反馈的感觉,所以在本文文末我将带着大家写第一个爬虫文件:我们要写一个爬虫文件,让这个爬虫在运行后显示“请输入姓名:”,当我们输入姓名后,就会显示相应的 “xxx,欢迎开始学习爬虫!!!”,现在我们从构思开始:
首先运行这个爬虫后,要有一行字来引导我们输入。我们就可以先写一个输入语句,参考刚才上文说的 标识符 = input(‘输入提示语’) 输入函数的使用说明,我们开始照葫芦画瓢。
在输入内容之前,我们要保证输入的内容会存在某个地方,我们要给这个地方取一个名字。这个地方的名字(即标识符)可以随便取,但是要记得上文说过的不能用数字开头,既然是输入姓名就叫他 name 吧。提示语应该是 “请输入姓名:”,所以后半句应该是 input(‘请输入姓名:’) ,这样我们的第一行代码就写好了:
name = input('请输入姓名:')
现在可以输入了,接下来还要输出内容,所以确定是 print() 函数。再想想输出的是啥呢?一共有两部分:首先要输出 刚才输入的姓名 ,我们刚才已经把输入的内容赋给 name 这个标识符了,所以只要把 name 放进 print() 函数里就好。
然后还要输出一句 ‘欢迎开始学习爬虫!!!’ ,我们再将这个字符串放进 print() 语句里,记得用逗号把它与刚才的 name 分隔开。这时候调整一下显示的顺序,我们写出了第二条代码:
>>> name=input('请输入姓名:')
>>> print(name, '欢迎开始学习爬虫!!!')
完成!
今天的内容就到此为止,我们在回顾一下刚才学习过的内容吧:
- 标识符:不能以 _____ 开头,可以使用 _____ 、 _____ 和 _____ 三种来命名。
- Python中注释使用 __ , 对程序的运行是否有影响: 是/否
- 导入某个模块时,我们使用 _____ 的方式;导入某个模块下的某条函数时,我们可以使用 _____ 的方式;导入某个模块下的全部函数时共有2种方式,分别是 _____ 和 _____ 。
- 导入某个模块下全部函数时,引用函数的方式分别是: __________ 引用函数的方式是 __________ 、 __________ 引用函数的方式是 __________ 。
- 将多行代码置于一行显示的连接符为 ___ ,将一行代码拆解为多行显示的分隔符为 ___ 。
- 空行是否计入行数: 是/否
- 写一个爬虫:运行程序后提示用户输入用户名与密码,用户回车后提醒用户“xxx(用户名),您已经成功注册!” (限制条件:用一行代码写出)