python课整理 2021.09.06

今天讲解的主要是字符串及一些相关操作,外加一些零碎的东西

虚数表示

首先是虚数的表示

i = 10 + 25j # 注意j前面不能写个*,不然不表示复数而且出错
print(i)

输出结果:

(10+25j)

python的优势:计算速度快

import time;
a = time.time()
c = 12346578912343454353456*456798134344324363463445613*1345132165132135
print("计算时间为:" + str(time.time() - a))
print(c)

输出结果

计算时间为:0.0001766681671142578
7586403113436561761682566044163183359642352261218157064975147280

字符串操作

切片

​ python字符串与c不同,它不能直接在对应的字符串上修改,即对该字符串直接赋值,但是我们可以直接通过切片来操作

# 假设我们进行字符串里字符赋值
str = "abcdefg"
str[2]  ='a'

​ 报错:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-74410ba1bc2e> in <module>
     10 b = str[ : :2] #表示对于整个字符串,步长为2,提取每隔1个字母,截取一个。
     11 print(b)
---> 12 str[2]  ='a'

TypeError: 'str' object does not support item assignment

​ 它解释说字符串并不支持这种操作。如果是采用拼接方式,内存地址也已经发生改变。

a = "123456"
print(a)
print(id(a))
a = a[0:5] + '6'
print(a)
print(id(a))

​ 输出结果:

123456
140392111853232
123456
140392111896176

​ 说明哪怕字符串是一样的,但是内存地址已经发生改变了。

​ 还要记住,python是没有数组概念的!

# 切片常见操作
# 字符串[开始索引:结束索引:步长] 开始索引是闭区间,结束索引是开区间,这个跟java的substring是一样的
str = "abcdefg"
print(str)
#拼接出我们要的
a = str[0:4:1] + 'a' + str[7:] #str[0:4:1]表示[0,4),记住是右闭合!!然后步长为1.
#str[7:]表示从下标为7开始至结束,步长默认为1
print(a)

输出结果:

abcdefg
abcda #a所拼接出的结果
步长
b = str[ : :2] #表示对于整个字符串,步长为2,提取每隔1个字母,截取一个。
print(b)

输出结果:

aceg
逆向操作

如果我们想要从字符串右边往左边操作就需要把步长改为负数,然后字符串右边第一个的下标是-1

str = "abcdefg"
print(str[ : :-1]) 
print(str[-1:-8:-1])
# 这两种表示方式是一样的,但是我更推荐第一种,因为我们不用特意算字符串长度
# 还有很多类似,比如str[-2: : -2],str[:-5:-3] 都是逆向的

输出结果:

gfedcba
gfedcba

我们一定要注意一点,只有步长才能表示字符串切片的方向,开始索引和结束索引的正负并不能决定

str = "abcdefg"
print(str[-4: : 1])
print(str[-4: : -1])

输出结果:

defg
dcba

从结果我们可以知道,如果步长为1,则说明从下标为-4,往右开始

而步长为-1,则说明从下标为-4,往左开始。

当然还可以这么操作

print(str[-4:5]) #不写步长,默认为1

输出结果:

de #从下标为-4,即d开始,到下标为5,即f结束,注意5是开区间,所以并没有加进去!!

转义字符

转义字符是一些功能性字符,通常是“\字符”表示

\n表示换行
\r表示回车,将当前位置移到本行开头
\t跳到下一个Tab位置
\表示一个反斜线’’

还有是一些在字符串表示 “、\、?等

如:

print("str\"aaa\'\\ ")

输出结果:

str"aaa'\ 

这样我们就可以在字符串中加入我们要的特殊符号了

print("abc\n")
print("abc",end="\n")

输出结果:

abc #有多一行换行是因为第一个print还有一个默认的end是换行的

abc

至于\r,可以实现一种动态效果,具体效果得自己操作得知,在此只附上源代码

import time
for i in range(0 , 1000, 50): #range(start,end,step) 开始(闭区间),结束(开区间),步长
    print(i,end="\r")
    time.sleep(1)

内建函数(又叫内置函数)

Python内置了很多函数和类型,具体的函数可以百度,这里就举例几个即可

a = -5
print(abs(a))
b = [1,2,3,4,5,6]
print(sum(b)) #也可以sum(range(1,7))

输出结果:

5
21

函数和方法的区别(我也不是很懂,暂时略)

从分类的角度来分析

(1)函数的分类:

  • 内置函数
  • 匿名函数
  • 递归函数
  • 自定义函数

(2)方法的分类:

  • 普通方法:直接self调用的方法
  • 私有方法:_函数名,只能在类中被调用的方法
  • 属性方法:@property,将方法伪装成为属性,让代码更合理(我不懂)
  • 特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。
  • 类方法:通过类名的调用去操作公共模板中的属性和方法。
  • 静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。

其次,从作用域的角度来分析:

(1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。

(2)方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放,也就是说调用方法中对变量的修改值会一直保留。

最后,调用的方式不同。(个人觉得这个更好懂一些)

(1)函数:通过“函数名()”的方式进行调用。

(2)方法:通过“对象.方法名”的方式进行调用。

还要一些比较特殊的,比如调用模块。

import time
time.sleep(1) #表示的是函数(调用time这个模块里面的函数)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值