前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天五分钟学Python,数字和字符串的基本用法

每天五分钟学Python,数字和字符串的基本用法

作者头像
TechFlow-承志
发布2022-08-26 15:04:08
3550
发布2022-08-26 15:04:08
举报
文章被收录于专栏:TechFlow

作者 | 梁唐

大家好,我是梁唐。

今天继续我们的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中的四则运算语法和其他语言完全一样,就是使用+-*/来表示加减乘除。

代码语言:javascript
复制
1 + 1   # => 2
8 - 1   # => 7
10 * 2  # => 20
35 / 5  # => 7.0

可以用%表示取模运算,也就是计算余数的运算。比如下面7对3取模,余数是1。这个用法C++和Java等语言当中也有。

代码语言:javascript
复制
7 % 3  # => 1

除了这些之外,Python还提供乘方操作,也就是用两个乘号表示乘方。比如3 ** 4表示3的4次方。

代码语言:javascript
复制
2 ** 3 # => 8

这里需要着重说一下的是除法,在Python2当中,10/3这个操作会得到3,而不是3.33333。因为除数和被除数都是整数,所以Python会自动执行整数的计算,帮我们把得到的商取整。如果是10.0 / 3,就会得到3.33333。目前Python2已经不再维护了,可以不用关心其中的细节。

但问题是Python是一个隐式类型的语言,如果我们在计算的时候往往是不知道变量的类型的。这就导致了同样的计算符可能会得到不同的结果,这非常蛋疼。以至于程序员在运算除法的时候,往往都需要手工加上类型转化符,强行将被除数转成浮点数。

好在Python3当中拨乱反正,修正了这个问题,即使是两个整数相除,并且可以整除的情况下,得到的结果也一定是浮点数。

想要计算整除的结果可以使用两个除号//,表示整除,在Python当中同样可以计算小数的余数。

代码语言:javascript
复制
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,可以写成这样:

代码语言:javascript
复制
"I don't like him"

在Python当中还支持多行文本,使用三个连续的引号即可声明。

代码语言:javascript
复制
text = '''
I don't like him.
Since he like my girl friend.
'''

基本操作

字符串可以通过[] + 下标来访问某个位置的字符。

代码语言:javascript
复制
"This is a string"[0]  # => 'T'

通过len函数来计算字符串的长度:

代码语言:javascript
复制
len("hello world") # => 11

但是要注意,Python中的字符串是一个常量,既然是常量就意味着我们不能对它进行修改。像是s[0] = 'b'的操作是非法的。

如果非要修改,我们可以使用一些其他的函数,但是这些函数会返回一个新的字符串,而不是在原串上进行修改。

字符串运算

Python中的字符串支持许多运算,比如字符串连接,我们可以使用+来很方便地将两个字符串拼接在一起。

代码语言:javascript
复制
'abc' + 'bcd' # => 'abcbcd'

除了加法之外,还可以使用乘法,乘法会将字符串重复。如:

代码语言:javascript
复制
'-' * 10 # => '----------'

我们还可以通过in和not in判断字符串是否包含另外一个字符串,比如我想要判断字符串'abc'是否在字符串s当中,就可以这样写:

代码语言:javascript
复制
'abc' in s

如果s包含'abc',那么会返回True,否则会返回False。not in的用法和in一样,只不过结果和in相反。

我们可以通过lower和upper将字符串转化成小写和大写,甚至还可以通过capitalize方法变成首字母大写。

代码语言:javascript
复制
'abc'.upper() # => 'ABC'
'ABC'.lower() # => 'abc'
'abc'.capitalize() # => 'Abc'

另外两个很常规的操作就是split和join,这两个互为逆操作。split很好理解,直译过来是分割的意思,也就是说可以根据标识对字符串进行拆分。

比如我们现在有这么一个字符串:'i do not like English',这是一句非常简单的英文,我们希望根据空格进行拆分,这样就可以得到每一个单词了。这非常简单,调用split函数,传入逗号即可。

代码语言:javascript
复制
s = 'i do not like English'
s.split(' ') # => ['i', 'do', 'not', 'like', 'English']

join就是split的反向操作,split是把一个字符串拆分成一个字符串数组,而join就是把一个字符串数组按照指定的分隔符再拼装成一个完整的字符串。

代码语言:javascript
复制
' '.join(['i', 'do', 'not', 'like', 'English']) # => 'i do not like English'

高级用法

Python中的字符串还包含许多高级用法,比如切片。

所谓切片,即是从原序列中截取拷贝出一个连续片段的操作。在Python当中不论是数组、元组还是字符串都可以使用,使用的方法也很简单,我们通过:传入两个数字,分别表示切片的开始和结束,解释器会拷贝对应的位置,并返回一个全新的片段。

代码语言:javascript
复制
s = 'hello'
s[1:3] # => 'el'

注意这里区间是左闭右开区间,除此之外,Python当中允许使用负数作为切片的标识。比如-1代表倒数第一的位置,同理-2表示倒数第二。

代码语言:javascript
复制
s = 'hello'
s[1:-1] # => ell

切片还有很多其他的用法,这里不一一列举了,之后会在介绍数组切片的时候再详细介绍。

除了切片之外,Python当中的字符串还有一个非常重要的用法就是智能拼接。我们都知道当我们要输出一个很复杂的结果的时候,如果使用传统的字符串拼接的方式往往比较复杂,需要做大量的类型转换,并且写很多的+连接在一起。

而使用智能拼接,我们可以非常方便地根据我们的需要生成想要的字符串。

举个例子,比如说我们现在有两个变量分别叫name和grade,我们想要输出这两个结果。原始的操作是这样的:

代码语言:javascript
复制
name = 'John'
grade = 'A'

print('name = ' + name + ', grade = ' + grade)

当我们使用智能拼接功能,可以非常方便地做到这一点:

代码语言:javascript
复制
name = 'John'
grade = 'A'

print(f'name = {name}, grade = {grade}')

看到了吗,我们在字符串之前加上一个字母f,表示这是一个智能拼接的字符串,接着使用花括号将变量名扩起来即可,Python会自动将对应的值填入对应的位置,非常方便地完成复杂字符串的组装。

不过要注意一点,只有Python3.6以上的版本支持f操作。

除了字符串之前加上f,智能拼接还有另外一种写法,就是调用format函数。调用format函数的话,我们需要在字符串待填入的位置留下花括号,将要填入的值传入format函数即可。

说起来好像很复杂,但是看个例子就明白了。

代码语言:javascript
复制
name = 'John'
grade = 'A'

print('name = {}, grade = {}'.format(name, grade))

是不是很干净利落,很简单?

好了,关于Python的numbers和string就介绍到这里,下一篇文章和大家聊聊Python当中的List和Tuple哥俩。

勘误

在上一篇文章当中犯了一个错误,将Python说成了弱类型语言,这里做一个勘误。

在早期还没有强弱类型概念诞生的时候,强弱类型被用来描述语言类型是否是静态(我也受此影响)。也就是说类型的强弱和动静在早期是混用的,到了近期,语言类型的强弱才被提出来。它指的是类型检查的严格程度,从这个方面来讲,Python应该算是强类型、动态类型、隐式类型语言。

不得不说,语言类型的强弱是一个非常晦涩的概念,要解释清晰需要非常多的篇幅,这里只做简单的介绍。大家感兴趣可以去百度了解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本变量类型
  • numbers
    • 四则运算
    • 字符串
      • 字符串声明
        • 基本操作
          • 字符串运算
            • 高级用法
            • 勘误
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档