python新手入门笔记(四)——字符串

字符串和字符串类型

字符串就是字符的序列,一种数据对象,其类型成为字符串类型,类型名字为str
如图:

a = 'hello world'
print(type(a))
//其输出结果为<class 'str'>

这里提一下单双引号,在python中单双引号的作用相同,但要配对,不能一个单引号加一个双引号。

'aaaaa"//此用法错误
'aaaaa'//正确用法
"aaaaa"//正确用法

这两种形式的限制是在一个字符串字面量中间不能换行,因此只适合描述比较短的字符串。如果在一个字符串没写完时换行,即没出现表示结束的第二个引号,将会出现语法错误报告 SyntaxError: EOL while scanning string literal,意为扫描字符串字面量的过程中遇到了换行(EOL, end of line)。

如果遇到需要写入长字符串,有两种方法,这里仅介绍简单的一种——使用一对连续的三个单引号或双引号作为字符串括号。

'''
aaaaaaaaaaaaa
aaaaaaaaaaa
aaaaaaaaaaaa
'''
"""aaaaaaaaaaaaa
aaaaaaaaaaaaaaa
aaaaaaaaaaaa"""
//这种形式的字符串,可在描述中进行换行,无论你将其拆成几行字符,解释器输出的是一个字符串

特殊字符

有些字符无法用普通字符形式写出,比如换行符 \n 。为了能在字符串里写这些字符,Python规定了一组特殊描述方式,下表是几个常用的特殊字符的写法及解释:

字符解释
\’单引号
\"双引号
\t制表符
\n换行符
\\反斜线符

这种写法称为换意序列,用反斜线符表示后面字符的意义换了。下面展示换意序列的用处:

'I don't understand'
//可以看出由于存在三个单引号的原因,字符串无法表达我们真正的意图,字符串在第二个引号处就已经中断了,即无法正确表示出don't
'I don\'t understand'
//使用换意序列 \' 后,该字符串的输出结果为I don't understand

字符串操作

字符串运算

在字符串中,我们从左至右数并非从1开始,而是从0开始。

//以下操作并不会产生任何结果,如需看到结果,将下列操作放入print()中即可
a = 'hello world'
a[0] // 0指向第一位,这是计算机语言中通用的,也就是指向h,输出结果为h
a[-1] // -1指向最后一位,输出结果为d
a[3] //从左向右数第(3+1)位,如果是a[n],即为指向(n+1)位,输出结果为l
a[-3] //从右向左数第三位,输出结果为r
a[13] //当我们取字符超过字符串长度时,就会发生超范围访问,即为下标越界(index out of range),解释器直接报错

显然,取字符只能在具体字符串的范围进行。

注意:python语言无独立的字符概念,只有字符串,通过下表取字符,即上述代码块的操作,得到的实际上是只包含一个字符的字符串。

我们可用len()来获取字符串长度(length),

a = 'helloworld'
print(len(a))
//输出结果为10

拼接

主要有两种,加法和乘法。

'hello' + ' ' + 'world'
//输出结果为'hello world'
'ok!' * 3
//输出结果为'ok!ok!ok!'
3 * 'ok!'
//输出结果同上

字符串切片

通过下标读取字符串还可同时读取多个字符,我们称之为切片
a[start:stop:count]:start表示开始读取,stop表示停止读取,count表示间隔个数读取,如果count位置为-1,则意味着倒序,count可省略不写,默认为1。切片描述中必须包含冒号

a = 'hello world'
a[1:3] //从左至右读取二到四位字符,输出结果为ell
a[8:-2] //读取从左至右第九位到从右至左第二位,输出结果为rl
a[0:5:2] //从左至右每两个字符读取一次,输出结果为sat
a[::-1] //倒序,输出结果为dlrow olleh,同理,count为-2则为每两个读取一次,输出结果为drwolh
a[-1:-5:-1] //倒序,输出结果为dlrow

注意事项

  • 在切片操作中,我们将下标取值超过字符串长度,不会出现错误报告,超出的部分只会输出结果为空。
  • 在**a[start:stop]**中,start ≥ stop则得到一个空值;
  • 在**a[start:stop:count]**中,当count为正数且start ≥ stop 或者 count为负数且stop ≥ start 时,都会得到一个空字符串。

字符串的常用方法

  1. endswith() 是否以xx结尾
  2. startswith() 是否以xx开头
  3. find(sub,[start, [end]]) 返回值是字符的索引,不存在是返回-1
  4. isalnum() 是否是字母和数字组成
  5. isalpha() 是否是字母
  6. isdigit() 是否是数字
  7. islower() 是否全部小写
  8. isupper() 是否全部大写
  9. lower() 转小写
  10. upper() 转大写
  11. swapcase() 大小写相互转换
  12. title() 每个单词首字母变大写
  13. strip() 去除左右两边空白
  14. rstrip() 去除右边空白
  15. lstrip() 去除左边空白
  16. replace() 替换
  17. split() 切割
  18. join() 拼接,a.join(b)是a插入b当中去,而非b插入a当中去。
  19. count() 统计字符数量
  20. len() 获取长度
  21. index() 获取字符索引
    下图显示以上常用方法用法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    关于字符串的方法还有很多,可通过dir(str)命令查看
    上面三图是利用jupyter做的,网上有教程,这里不做赘述。感兴趣的可以去搜。
### ThreadPoolExecutorThreadPoolTaskExecutor区别 #### ThreadPoolExecutor 特点 `ThreadPoolExecutor` 是 `java.util.concurrent` 包中的一个类,用于管理线程池。它提供了创建不同类型的线程池的能力,并允许配置核心线程数、最大线程数以及保持活动时间等参数[^1]。 ```java ThreadPoolExecutor executor = new ThreadPoolExecutor( corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue); ``` 此实现方式直接操作底层并发工具库,适合于需要精细控制线程池行为的应用场景。 #### ThreadPoolTaskExecutor 特点 相比之下,在Spring框架内使用的 `ThreadPoolTaskExecutor` 实际上是对 `ThreadPoolExecutor` 进行了一层封装。通过这种方式,开发者可以更方便地利用Spring容器来管理配置线程池资源。此外,还支持Bean属性注入等方式简化设置过程。 ```xml <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5"/> <property name="maxPoolSize" value="10"/> </bean> ``` 或者采用Java Config形式: ```java @Configuration public class AppConfig { @Bean(name = "taskExecutor") public TaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); return executor; } } ``` 当向此类对象提交任务时,并不是手动获取线程去执行任务,而是将可运行的任务加入到队列中由内部机制决定何时被执行[^2]。 对于偏好XML配置的情况,则可以通过 `<task:annotation-driven>` 元素配合自定义的 `executor` 来启用异步方法的支持[^3]。 综上所述,两者主要差异在于应用层次的不同——前者属于JDK层面的基础组件;后者则是基于Spring框架所提供的高级抽象接口,旨在提高开发效率的同时降低复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值