每天五分钟学Python,数字和字符串的基本用法
作者 | 梁唐
大家好,我是梁唐。
今天继续我们的Python基础内容,上一次我们对Python做了一个简单的介绍,涉及Python的一些语言特性、必备常识、IDE的使用等等,今天我们来介绍Python的一些具体的语法。
基本变量类型
首先我们来说说Python的基本变量类型,如果大家学过C++或者是Java的话想必应该都知道,对于这两门语言来说,它们的基本类型都是8种,这当中包含了int32和int64,float和double等这种是同一个类型,只是范围不同的类别。
而Python有些特殊,因为它是一门隐式变量语言,不会写明变量的类型,所以我们通常会把int和float类型也合并。谈及基础类型的时候只有五种,numbers(数)、string(字符串)、array(数组)、tuple(元组)和dict(字典)。
我知道对于没有学过Python的同学来说,其中的几种看起来可能有些陌生。没关系,我们先放一放,先从基本的numbers和string开始。
numbers
这就导致了一个问题,就是没办法确定变量的范围。比如说C++里面普通的int是32位的,而long long是64位的,short是8位的。这些类型都是整数,但是能够存储的范围不同。对于C++这样显示类型的语言来说,这不是问题,但是对于Python怎么办呢?
Python对于这个问题的解决方法很简单,就是都统一,放开限制。
在Python当中int是没有范围限制的,基本等价于无论多大的数都能存储得下。但是我们都知道CPU是有位数限制的,一般都是64位,虽然Python能够处理大于int64的数,但它底层是通过高精度算法模拟的,而不是CPU直接计算的。所以性能会有区别。
同样,Python不支持32位的单精度浮点数,只支持64位的double类型。Python中默认是17位小数的精度,虽然更多也可以显示,但是并不精确,没有任何意义。
比如我们可以在输出的时候限制精度来强制输出30位小数的数字,就像这样:
虽然我们强行输出了30位小数,但是很明显,出来的结果是不准的,这没有任何意义。一般来说日常的场景也不会用到这么高的精度,一般小数点之后保留三四位就足够了。
四则运算
Python中的四则运算语法和其他语言完全一样,就是使用+-*/来表示加减乘除。
1 + 1 # => 2
8 - 1 # => 7
10 * 2 # => 20
35 / 5 # => 7.0
可以用%表示取模运算,也就是计算余数的运算。比如下面7对3取模,余数是1。这个用法C++和Java等语言当中也有。
7 % 3 # => 1
除了这些之外,Python还提供乘方操作,也就是用两个乘号表示乘方。比如3 ** 4表示3的4次方。
2 ** 3 # => 8
这里需要着重说一下的是除法,在Python2当中,10/3这个操作会得到3,而不是3.33333。因为除数和被除数都是整数,所以Python会自动执行整数的计算,帮我们把得到的商取整。如果是10.0 / 3,就会得到3.33333。目前Python2已经不再维护了,可以不用关心其中的细节。
但问题是Python是一个隐式类型的语言,如果我们在计算的时候往往是不知道变量的类型的。这就导致了同样的计算符可能会得到不同的结果,这非常蛋疼。以至于程序员在运算除法的时候,往往都需要手工加上类型转化符,强行将被除数转成浮点数。
好在Python3当中拨乱反正,修正了这个问题,即使是两个整数相除,并且可以整除的情况下,得到的结果也一定是浮点数。
想要计算整除的结果可以使用两个除号//,表示整除,在Python当中同样可以计算小数的余数。
5 // 3 # => 1
-5 // 3 # => -2
5.0 // 3.0 # => 1.0 # works on floats too
-5.0 // 3.0 # => -2.0
字符串
字符串声明
在Python当中字符串既可以使用单引号也可以使用双引号,这两种方法没有任何区别。
看似这个设定没啥用,但是如果我们想要书写的文本当中包含引号,就能体现优势了。如果是其他语言还需要使用\进行强转,而在Python当中很简单,只需要使用另外一种引号即可。
比如,我想要创建一个字符串:I don't like him,可以写成这样:
"I don't like him"
在Python当中还支持多行文本,使用三个连续的引号即可声明。
text = '''
I don't like him.
Since he like my girl friend.
'''
基本操作
字符串可以通过[] + 下标来访问某个位置的字符。
"This is a string"[0] # => 'T'
通过len函数来计算字符串的长度:
len("hello world") # => 11
但是要注意,Python中的字符串是一个常量,既然是常量就意味着我们不能对它进行修改。像是s[0] = 'b'
的操作是非法的。
如果非要修改,我们可以使用一些其他的函数,但是这些函数会返回一个新的字符串,而不是在原串上进行修改。
字符串运算
Python中的字符串支持许多运算,比如字符串连接,我们可以使用+来很方便地将两个字符串拼接在一起。
'abc' + 'bcd' # => 'abcbcd'
除了加法之外,还可以使用乘法,乘法会将字符串重复。如:
'-' * 10 # => '----------'
我们还可以通过in和not in判断字符串是否包含另外一个字符串,比如我想要判断字符串'abc'是否在字符串s当中,就可以这样写:
'abc' in s
如果s包含'abc',那么会返回True,否则会返回False。not in的用法和in一样,只不过结果和in相反。
我们可以通过lower和upper将字符串转化成小写和大写,甚至还可以通过capitalize方法变成首字母大写。
'abc'.upper() # => 'ABC'
'ABC'.lower() # => 'abc'
'abc'.capitalize() # => 'Abc'
另外两个很常规的操作就是split和join,这两个互为逆操作。split很好理解,直译过来是分割的意思,也就是说可以根据标识对字符串进行拆分。
比如我们现在有这么一个字符串:'i do not like English',这是一句非常简单的英文,我们希望根据空格进行拆分,这样就可以得到每一个单词了。这非常简单,调用split函数,传入逗号即可。
s = 'i do not like English'
s.split(' ') # => ['i', 'do', 'not', 'like', 'English']
join就是split的反向操作,split是把一个字符串拆分成一个字符串数组,而join就是把一个字符串数组按照指定的分隔符再拼装成一个完整的字符串。
' '.join(['i', 'do', 'not', 'like', 'English']) # => 'i do not like English'
高级用法
Python中的字符串还包含许多高级用法,比如切片。
所谓切片,即是从原序列中截取拷贝出一个连续片段的操作。在Python当中不论是数组、元组还是字符串都可以使用,使用的方法也很简单,我们通过:传入两个数字,分别表示切片的开始和结束,解释器会拷贝对应的位置,并返回一个全新的片段。
s = 'hello'
s[1:3] # => 'el'
注意这里区间是左闭右开区间,除此之外,Python当中允许使用负数作为切片的标识。比如-1代表倒数第一的位置,同理-2表示倒数第二。
s = 'hello'
s[1:-1] # => ell
切片还有很多其他的用法,这里不一一列举了,之后会在介绍数组切片的时候再详细介绍。
除了切片之外,Python当中的字符串还有一个非常重要的用法就是智能拼接。我们都知道当我们要输出一个很复杂的结果的时候,如果使用传统的字符串拼接的方式往往比较复杂,需要做大量的类型转换,并且写很多的+连接在一起。
而使用智能拼接,我们可以非常方便地根据我们的需要生成想要的字符串。
举个例子,比如说我们现在有两个变量分别叫name和grade,我们想要输出这两个结果。原始的操作是这样的:
name = 'John'
grade = 'A'
print('name = ' + name + ', grade = ' + grade)
当我们使用智能拼接功能,可以非常方便地做到这一点:
name = 'John'
grade = 'A'
print(f'name = {name}, grade = {grade}')
看到了吗,我们在字符串之前加上一个字母f,表示这是一个智能拼接的字符串,接着使用花括号将变量名扩起来即可,Python会自动将对应的值填入对应的位置,非常方便地完成复杂字符串的组装。
不过要注意一点,只有Python3.6以上的版本支持f操作。
除了字符串之前加上f,智能拼接还有另外一种写法,就是调用format函数。调用format函数的话,我们需要在字符串待填入的位置留下花括号,将要填入的值传入format函数即可。
说起来好像很复杂,但是看个例子就明白了。
name = 'John'
grade = 'A'
print('name = {}, grade = {}'.format(name, grade))
是不是很干净利落,很简单?
好了,关于Python的numbers和string就介绍到这里,下一篇文章和大家聊聊Python当中的List和Tuple哥俩。
勘误
在上一篇文章当中犯了一个错误,将Python说成了弱类型语言,这里做一个勘误。
在早期还没有强弱类型概念诞生的时候,强弱类型被用来描述语言类型是否是静态(我也受此影响)。也就是说类型的强弱和动静在早期是混用的,到了近期,语言类型的强弱才被提出来。它指的是类型检查的严格程度,从这个方面来讲,Python应该算是强类型、动态类型、隐式类型语言。
不得不说,语言类型的强弱是一个非常晦涩的概念,要解释清晰需要非常多的篇幅,这里只做简单的介绍。大家感兴趣可以去百度了解。
相关文章
- Python开发者必知的13个Python GUI库
- 一个精壮的代购骗子被我用Python彻底征服了
- Python抓取腾视频所有电影,不用钱就可以看会员电影
- 在树莓派中使用 MicroPython 接入 MQTT
- python 基尼系数_Python计算
- Python+OpenCV实时图像处理「建议收藏」
- 用 Python 控制了室友电脑的开机密码
- 第一章:起步(python环境搭建)
- 用Python的好处
- Python-方法反射
- 快速了解 OJ 判题系统如何在python中使用?
- Python-drf前戏38.3-前端Vue03
- python的第三方库是用什么实现的_python 第三方库
- Python 命令行参数的3种传入方式
- Python求解两数之和[通俗易懂]
- python 变量与数据类型
- 2022年最新Python大数据之Python基础【七】参数与管理系统
- Easy Games With Python and Pygame(三)- Pygame Event
- Python基础13-模块的使用
- Python <算法思想集结>之抽丝剥茧聊动态规划