python小白笔记之数据类型01

作为一个python入门仅两个月的小白的我来说,学到的越多,越怕忘记,总想把学到的东西记录下来,转化为自己的东西。于是……咳咳……今天开启python小白笔记系列短文,码字很爽,一直码一直爽,但日更,是不可能的,这辈子都不会日更……

变量

概念

变量变量,就是会变的量(小声逼逼:谁不会说)。那我们可以把变量比喻成一个容器,里面装啥都行。碗总该见过吧,想吃啥就装啥,你可以用碗盛饭,也可以用碗盛汤,那么碗就起到了变量的作用,盛饭就相当于给变量赋值的过程。
有了变量之后,我们要给它起一个好听的名字啊,但这个名字可不是随便起的,想想你爸爸给你起名字的时候是随便起的吗?哈哈哈。

命名规则

  • 变量名必须以字母下划线开始,名字中间只能以字母数字下划线组成。比如你起个123namename@1变量,这些就是不允许的。
  • 变量名的长度不得超过255个字符。弱弱问一句:谁会取个变量名那么长。
  • 变量名在有效的范围内是唯一的。这个有效的范围该怎么理解呢?如果你学到了后面,这个有效范围应该是一个具体的结构中,比如一个函数,后面遇到再说。
  • 变量名不能是python中的关键词。那我怎么知道python的关键词有哪些,这个吗……自己去查,我懒。

一些问题

1.比如下面的例子:

a = 1
b = a
>>id(a)
>>id(b)

猜猜结果是怎样的?结果是:

140710825345680
140710825345680

没想到储存在计算中的地址是一样的,学过C语言的小伙伴应该记得,同样的操作,在C中开辟的两个不同的储存空间,它们的地址是不一样的,python是不是很神奇?感觉类似指针。
再来看看:

a = 1
b = a
>>a
1
>>b
2
# 改变b的值,但a的值不变
b = 2
>>a
1
>>b
2

现在可以明白在python中变量的存储机制了吧,看我的灵魂画手:

image.png

也就是说:
a = 1的时候,python解释器创建了一个值为1的内存,并用变量a指向这个值的内存。
b = a的时候,并没有建立一个新的内存,变量b指向跟a一样的内存。
b = 2时,实际是建立了一个值为2的内存,并用b指向它,跟a分道扬镳了。此时a还是指向1
懂了吗?懂了吗?懂了吗?不懂的小伙伴打电话找我。
2.变量生命周期在不同的结构中也不一样,如果后面的函数、类中我记起来再详细讲讲。


数字

敢问谁不知道数字是什么?不懂的:



数字就是1,2,3,1.34……这些,包括整型和浮点型等等,其他不常用的我就不提了。

整型

整数都应该懂吧,1,2,3,4……没有小数位的都是整型数字。

浮点型

浮点型就是有小数位的数字,像1.2,1.4,4.5……这些。

运算

  • 加减乘除
    大家好,我是你们小学二年级的老师,现在给你们上数学课。
a = 1
b = 2
# 加法
>>a + b
3
# 减法
>>a - b
-1
# 乘法
>>a * b
2
# 除法
>>a/b
0.5
>>3*(a + b) -3
6

是不是很简单,是不是感觉有辱智商。运算的话在现实中怎么算的怎么来。

  • 乘方
    乘方运算用两个*就可以了。
a = 3
b = 4
# a的b次方
>>a**b
81
  • 取整
    这里的取整可不是数学意义上的取整,这里是一个数除以另一个数,只获得整数部分,抛弃了小数部分。
a = 12
b = 5
# 表示a除以b,只获得整数部分
>>a//b
2
  • 取余
    余数应该也懂吧,使用%符号。
a = 12
b = 5
# 取余运算
>>a % b
2

类型转换

有时候我们在计算的时候,需要将整数转换为带小数的浮点型,又或者反过来呢?

  • int()将一个数转换为整型数字。直接把小数位拿掉,不会考虑四舍五入。
a = 1.2
>>int(a)
1
a = 1.5
>>int(a)
1
  • float()将一个数转换为浮点类型。
a = 1
>>float(a)
1.0

字符串

概念

字符串就是一连串的字符连接起来的序列,例如:'name''你好'"123",在python中使用单引号和双引号都可以表示字符串。
那有人就会说,如果一个字符串中我想要有引号怎么办呢?
那么接下来就是字符串的表示问题了。

字符串的表示

  • 使用单引号
# 单引号里面可以使用双引号
str1 = 'he is a "lazy" boy'
  • 使用双引号
# 双引号里面可以有单引号
str2 = "he is a 'lazy' boy"
  • 使用三重引号
str3 = """海阔凭鱼跃,
天高任鸟飞。
"""

发现三重引号有什么不同?当我们的字符串中有很多换行的时候,就可以使用三重引号,它能在我们执行下面的打印操作的时实现换行。

操作

那么接下来就是对字符串的各种骚操作了。

打印

我们会经常会把一些变量打印在屏幕上,这时候这就使用了print()这个函数,里面放进我们的变量或者字符串都可以。

name = "caibaozhatou"
print (name)
print ("caibaozhatou")
>>caibaozhatou
>>caibaozhatou

当我们亲自操作时总会遇到各种各样的问题,就比如打印上面提到的换行的字符串。
假如我们这样操作:

print ("海阔凭鱼跃,
天高任鸟飞。")

那么打印出的结果为:

SyntaxError: EOL while scanning string literal

报错了吧,这里表示语法错误,在python中,使用双引号时,里面的字符串的换行是不支持的,这时需要用三重引号才可以。

print ("""海阔凭鱼跃,
天高任鸟飞。
""")
>>海阔凭鱼跃,
>>天高任鸟飞。
# 如果上面这样很别扭的话,还可以这样写,反斜杠表示不包括那一行的换行
print ("""\
海阔凭鱼跃,
天高任鸟飞。
""")
>>海阔凭鱼跃,
>>天高任鸟飞。

除了使用三重引号外,还可以使用换行符\n

print ("海阔凭鱼跃,\n天高任鸟飞。")
>>海阔凭鱼跃,
>>天高任鸟飞。

\n是个转义字符,但有时候我们可能会打印有反斜杠的字符串,而不需要有转义的成分,比如打印一个文件地址,这该怎么办呢?绞尽脑汁。
不要灰心,在字符串前面加上r表示使用原生字符就可以了,原生字符就是里面是啥就是啥,告诉计算机别想那么多。

# 这时候会把\n理解成换行符
print ("C:\name")
>>C:
ame
# 使用原生字符,打印原来字符串的内容
print (r"C:\name")
>>C:\name
格式化字符

前面的打印字符串变量都有一个问题,那就是把字符串都写死了,有时候我们想在一个字符串的某个位置打印出我们想要的东西,这时候就可以使用字符串的格式化处理。
字符串的格式化有两种,一种是使用str.format()格式化方法,另一种是printf风格的格式化,其实我个人觉得对于新手用前者比较好,后者有时候难以理解,那么下面主要讲述str.format()格式化的方法。

  • 按位置
# 把要替换的内容用{}替代,然后在format()中按位置放入前面替换的字符串即可
print ("我的名字是{},我今年{}岁。".format("小明", 18))
>>我的名字是小明,我今年18岁。

连接

  • +号连接
str1 = 'abc'
str2 = 'efg'
str3 = str1 + str2
print (str3)
>>abcefg
# 或者直接在print()中连接
print("abc"+"efg")
>>abcefg
  • 隐式连接
    如果两个字符串挨在一起,则默认隐式的连接在一起,这对一个很长的字符变量很有用,比如一段很长的字符串写一行很不美观,查看也不方便,就可以拆成几段,分成几行,之间用隐式连接。
text = 'slfjslfjslfjlsjflsjflsjflflcnvkdnsoalanv''sjfslfjsooeiwhfvnblsljaofjojf'
print (text)
>>slfjslfjslfjlsjflsjflsjflflcnvkdnsoalanvsjfslfjsooeiwhfvnblsljaofjojf
print ("slfjslfjslfjlsjflsjflsjflflcnvkdnsoala"
"slfjsooeiwhfvnblsljaofjojf")
>>slfjslfjslfjlsjflsjflsjflflcnvkdnsoalaslfjsooeiwhfvnblsljaofjojf

复制

先来抛出一个问题:
打印0101这个字符串,这不是很简单吗?

print ('0101')
>>0101

那我要说,如果这个字符串里面有100个01呢,你打啊!不过学了python之后,就变得很简单了,你只要这样:

print ("01"*100)
>>01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101

把它理解成把前面那个字符串乘以100就很容易了。
字符串变量目前没有复制的操作,你只能创建一个指向同一个字符串的变量,而不能复制出一个一模一样的不同变量出来。

获取长度

直接调用len(str)函数即可返回某个字符串的长度。

str1 = 'abc'
print (len(str1))
>>3
print (len('abc'))
>>3

单个字符是长度为一的字符串。

索引

字符串是可以被索引查找的,也就是可以通过下标查找,索引值默认从0开始。

str1 = 'abcdefg'
# str1的第三个字符
str1[2]
>>c
# str1的第一个字符
str1[0]
>>a

查找

  • in/not in
    使用in来判断某个字符串是否在一个字符串中,存在的话,返回Ture,反之返回False
# 存在
'abc' in 'abcdffea'
>>True
# 不存在
'efg' in 'abcdffea'
>>False

反过来,使用not in来判断是否不存在,不存在返回True,存在返回False

# 注意区分
'abc' not in 'fjijeid'
>>True
'abc' not in 'fabcsdid'
>>False
  • find()
    str1.find(str2, start, end)用来查找str2字符串在str1字符串中的出现的最小索引,也就是说,不管str2str1中存在多少个跟它一样的,只返回第一个出现时的索引,startend参数是对str1的切片表示,下面讲。
str1 = 'abcdefg'
str2 = 'efg'
str1.find(str2)
>>4
# 切片表示,下面表示从str1的第四个字符到最后一个字符取出来判断
str1.find(str2, 3, 7)
>>4
# 如果找不到怎么办
str3 = 'opq'
str1.find(str3)
>>-1

可见,使用find()函数,如果查找不到,只能返回-1不会报错
查看了一下官方文档,居然有一个函数,类似上面的find()函数,不过人家返回的是最大索引,这个函数是rfind(),用法一样。

  • index()
    这个函数用法跟find()几乎一样,那用什么区别呢?
str1 = '1234512389'
str2 = '123'
str1.index(str2)
>>0
str3 = '456'
str1.index(str3)

没想到,没想到……

ValueError                                Traceback (most recent call last)
 in 
      1 str1 = '1234512389'
      2 str3 = '456'
----> 3 str1.index(str3)

ValueError: substring not found

居然报错了。
index()就是这样,如果你查找不到,就直接报错,这样会使我们的程序直接停止运行,感觉不是很好。

切片

str1 = '123456789'
# 获取str1第2到第4位之间的字符串
str1[1:3]      # 不包括第4位
>>'23'
# 从第1位开始的,前面可以不写
# 获取第1位到第5位
str1[:4]
>>'1234'    # 不包括5位
# 获取第6位到最后一位
# 到最后一位的,后面可以不写
str1[5:]
>>'6789'
# 倒着写,最后一位索引是-1
str1[-3:-1]
>>'78'    # 并没有包含最后一位,切记
# 获取倒数第3位到最后1位
str1[-3:]
>>'789'

哪里不会切哪里。

移除字符

  • str.strip(chars)
    表示在str头部尾部移除chars里面的字符序列,也就是在两端的字符,只要有chars出现的字符都要去掉,当chars为空时,默认移除空白符,即\n\r\t' '(空格)。
# 1.chars为空值的情况
# 移除空格
str1 = '       name       '
str1.strip()
>>'name'
# 移除换行符
str2 = 'name\n'
str2.strip()
>>'name'
# 2.chars不为空的情况
str1 = 'abcdefg'
# 注意字符a在开头,移除a
str1.strip('a')
>>'bcdefg'
# 试一下移除字符c
str1.strip('c')
>>'abcdefg'    # 没有用,因为c不在头部或尾部
# 移除字符序列
str3 = 'abcgeafab'
str3.strip('abc')
>>'geaf'    # 这里注意,头尾凡是有'a'、'b'、'c'当中的任意一个字符,都将去除。

所以得出结论:str.strip()函数最常用于去除空白字符,特别是换行符空格,这在爬虫中很有用。

替换

str.replace(old, new,count)
表示在字符串str中出现的所有old字符串用new字符串替换,其中参数count表示只替换前count次出现的old字符串。

# ab出现了3次
str1 = 'abcslfieslabseab'
# 将ab替换成ef
str1.replace('ab', 'ef')
>>'efcslfieslefseef'
# 只替换前两个ab
str1.replace('ab', 'ef', 2)
>>'efcslfieslefseab'

有时候我们就想啊,怎么把一个字符串中一个小的字符串都去除掉。
想啊~
想啊~
想~
new字符串设置为空不就行了?

str1 =  'abcslfieslabseab'
# 去除所有的'abc'字符串
str1.replace('abc', '')
>>'bcgefb'

写在后面

想要学习更多的的python相关知识,除了查看其他人的相关文章之外,还可以看看官方文档,毕竟官方文档才是爸爸,在此贴出(中文)官方网址:https://docs.python.org/zh-cn/3/index.html
还有就是,坚持写文刷钻,坚持坚持!

你可能感兴趣的:(python小白笔记之数据类型01)