字符串、函数、bug
字符串
字符串驻留机制
- 仅保存一份相同且不可变字符串的方法,不同的值别存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续穿件相同的字符串时,不会开辟新的空间,而是把字符串的地址赋给新创建的变量
驻留机制的集中情况
- 字符串的长度为0或1时
- 符合标识符的字符串 不符合开辟多个内存区域
- 字符串只在编译时驻留,而非运行时
- [-5,256]之间的整数数字
sys中的intern方法强制2个字符串指向同一个对象
Pycharm对字符串进行了优化处理
c = ''.join(['ab','c'])
字符串的查询操作
| 方法 | 作用 |
|---|---|
| index() | 查子串substr第一次出现的位置,如果查找的字符串不存在时,则抛出异常ValueError |
| rindex() | 查找子串substr最后一次出现的位置,如果查找子串不存在时,则抛出ValueError |
| find() | 查找子串substr第一次出现的位置,如果查找子串不存在时,则返回-1 |
| 人find() | 查找子串substr最后一次出现的位置,如果查找子串不存在时,则返回-1 |
字符串大小写转换操作
| 方法 | 作用 |
|---|---|
| upper() | 把字符串中的所有字符都转换成大写字母 |
| lower() | 把字符串中的所有字符都转换成小写字母 |
| swapcase() | 把字符串中所有大写字母转换成小写字母,把所有的小写字母都转成大写字母 |
| capitalize() | 把第一个字符转换为大写,把其余字符转换为小写 |
| title() | 把第一个单词的第一个字符转换为大写,把每一个单词的剩余字符串装换位小写 |
字符串的对齐操作
| 方法 | 操作 |
|---|---|
| center() | 居中对齐,第一个参数指定宽度,第2个参数指定填充字符,第二个参数是可选的,默认是空格,如果设置宽度小于实际的宽度则返回原字符 |
| ljust() | 左对齐,第一个参数指定宽度,第2个参数指定填充字符,第二个参数是可选的,默认是空格,如果设置宽度小于实际的宽度则返回原字符 |
| rjust() | 右对齐,第一个参数指定宽度,第2个参数指定填充字符,第二个参数是可选的,默认是空格,如果设置宽度小于实际的宽度则返回原字符 |
| zfill() | 右对齐,左边用0填补,该方法只接受一个参数,用于指定字符串的宽度,如果指点的宽度小于等于字符串的长度,返回字符串本身 |
字符串的劈分方法
| 方法 | 操作 |
|---|---|
| split() | 从字符串的左边开始劈分,默认的劈分字符的是空格字符串,返回的都是一个列表|通过参数sep指定劈分字符串是的劈分符|通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分之后,剩余的子串会单独作为一部分 |
| rsplit() | 从字符串的右边开始劈分,默认的劈分字符的是空格字符串,返回的都是一个列表|通过参数sep指定劈分字符串是的劈分符|通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分之后,剩余的子串会单独作为一部分 |
判断字符串操作的方法
| 方法 | 操作 |
|---|---|
| isidentifier() | 判断指定字符串是不是合法的标识符 |
| isspace() | 判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符) |
| isalpha() | 判断指定的字符串是否全部由字母组成 |
| isdecimal() | 判断指定的字符串是否由全部由十进制的数字组成 |
| isnumeric() | 判断指定的字符串是否全部由数字组成 |
| isalnum() | 判断指定字符串是否全部由字母和数字组成 |
字符串的其他操作
| 方法 | 操作 |
|---|---|
| replace() | 第一个参数指定被替代的字符串,第二个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法是可以通过第三个参数指定最大替换次数 |
| join() | 将列表或元组中的字符串合并成一个字符串 |
字符串的比较操作
- 运算符 > < >= <= == !=
- 比较规则:
- 首先比较字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其余的比较结果就是连个字符串的比较结果,连个字符串中的所有后续字符串将不在被比较
- 比较原理:
- 两个以上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符串的ordinal value。与内置函数ord 对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
这里的原始值比较的是ASCLL编码的值
字符串的切片操作
- 字符串时不可变类型,不可以进行删、改、增操作
- 切片将产生新的对象
s='hello python'
s1 = s[:5]
s2 = s[6:]
print(s1)
print(s2)
hello
python
格式化字符串
格式化字符串可以降低在字符串拼接时,产生的多个子串的冗余空间,减少资源的开销。
格式化字符串的两种方式:
- %作为站位符
- %s ------字符串
- %i或%d ----整数
- %f -----------浮点数
name = "张三"
age = 20
print('我叫%s,年龄%d'%(name,age))
我叫张三,年龄20
- {}作为占位符
name = "张三"
age = 20
print('我叫{0},年龄{1}'.format(name,age))
我叫张三,年龄20
python3:
name = "张三"
age = 20
print(f'我叫{name},今年{age}')
我叫张三,今年20
字符串的编码转换
- 编码:将字符串转换成二进制数据(bytes)
- 解码:将bytes类型的数据转换成字符类型
s = '天涯'
print(s.encode(encoding='GBK'))#在GBK中文编码中一个中文站2个字节
print(s.encode(encoding='UTF-8'))#在GBK中文编码中一个中文站3个字节
byte = b'\xcc\xec\xd1\xc4'
BYTE =b'\xe5\xa4\xa9\xe6\xb6\xaf'
print(byte.decode(encoding='GBK'))
print(BYTE.decode(encoding='utf-8'))
b'\xcc\xec\xd1\xc4'
b'\xe5\xa4\xa9\xe6\xb6\xaf'
天涯
天涯
函数
函数是执行特定的任务和以完成特定的方法的一段代码
为什么学要函数?
- 复用代码
- 隐藏实现细节
- 提高可维护性
- 提高可读性便与调试
函数的创建:
def 函数名 ([]):
函数体
[return xxx]
例子:
def getNum(a,b):
if(a>b):
return a
else:
return b
if __name__ == '__main__':
print(getNum(1,5))
函数的传递、形参、实参
def xxx(形参):
.........
xxx(实参)
参数传递:
- 位置实参
- 根据位置形参对应的位置进行实参传递
- 关键字实参
- 更据形参名称进行实参传递
xxx(a=xx,b=xx)
形式参数和实际参数的名称可以不相同,对于不可变的数据对象对他操作无法改变值,只能改变对象应用中的内部元素的值:列表、字典、集合
函数的返回值
- 没有返回值
- 函数的返回值,如果是一个直接返回
- 函数返回多个返回值,返回的结果是元组
def getNum(num):
odd=[]
even=[]
for i in num:
if i%2==0:
odd.append(i)
else:
even.append(i)
return odd,even
if __name__ == '__main__':
print(getNum(range(11)))
s= getNum(range(11))
for i in s:
print(i)
([0, 2, 4, 6, 8, 10], [1, 3, 5, 7, 9])
[0, 2, 4, 6, 8, 10]
[1, 3, 5, 7, 9]
函数的定义默认值参数
- 定义函数时,给形参设置默认参数值,只有与默认值不符的时候才需要传递实参
def fun(a,b=10)
....
fun(100)#b=10
fun(20,30)#30将默认10替换
个数可变的位置参数
- 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
- 使用*定义个数可变的位置形参
- 结果为一个元组
def fun(*args):
print(args)
fun(10)
fun(10,20,30)
(10,)
(10,20,30)
个数可变的关键字形参
- 定义参数时,无法事先确定传递关键字实参的个数时,可以使用可变的关键字形参
- 使用**定义个数可变的关键字形参
- 结果为一个字典
def fun(**agrs):
print(args)
fun(a=10)
fun(a=10,b=20,c=30)
{'a':10}
{'a':10,'b':20,'c':30}
变量的作用域
- 程序代码能访问该变量的区域
- 更据变量的有效范围可分为:
- 局部变量:
- 函数内定义并使用的变量,只在函数内部有效,局部变使用global声明,这个变量就会变成全局变量
- 全局变量
- 函数体外定义的变量,可作用于函数体内
- 局部变量:
递归函数
如果在一个函数体的内部调用了该函数体本身,那么这个函数就被称为递归函数
- 递归函数的组成:
- 递归调用与递归停止
- 递归调用过程
- 每一次递归调用依次函数,都会在栈内分配一个栈帧
- 每次执行完一次函数,就会释放相应的空间
- 递归的优缺点:
- 缺点:占用的内存多,效率低
- 有带你:思路和代码简单
def fun(num):
if num==1:
return 1
else:
return num*fun(num-1)
print(fun(10))
3628800
bug
常见的bug
- input()返回的类型时str类型 ,结果与相应的比较时要进行类型转换。SyntaxError
- 注意使用英文输入
- 语法错误 = = 缩进错误
- 索引越界问题 IndexError
- append不熟练
类似try catch
但是在python中是**try except xxx: **
try:
n1 = int(input("请输入数字"))
n2 = int(input("请输入数字"))
result = n1/n2
print('结果是',result)
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('不能将字符串转换成数字')
except BaseException as e:
print(e)
处理异常的代码结果块
- try --except----else
如果try块中没有抛出异常执行的是else块中的代码,如果try块中抛出异常这执行except块中的代码
- try--except----else----finally
如果try块中没有抛出异常执行的是else块中的代码,如果try块中抛出异常这执行except块中的代码,无论是否抛出异常都会执行finally中的代码,通常用来执行try中对于资源的关闭
python的异常类型
| 异常类型 | 描述 |
|---|---|
| ZeroDivisionError | 除(或取模)零(所有数据类型) |
| IndexError | 序列中没有此索引 |
| KeyError | 映射中没有这个建 |
| NameError | 未声明/初始化对象(没有这个属性) |
| SyntaxError | Python语法错误 |
| ValueError | 传入无效的参数 |
异常处理模块
- traceback模块
import traceback
try:
print('1.------------')
print(1/0)
except:
traceback.print_exc()
Traceback (most recent call last):
File "D:\pycharm2020.1_workspace\learnTest\learnPython\__init__.py", line 194, in <module>
print(1/0)
ZeroDivisionError: division by zero
1.------------
DeBug调试
字符串、函数、bug的更多相关文章
- PHP 多字节字符串 函数
参考资料 多字节字符编码方案和他们相关的问题相当复杂,超越了本文档的范围. 关于这些话题的更多信息请参考以下 URL 和其他资源. Unicode materials » http://www.uni ...
- 《C prime plus (第五版)》 ---第11章 字符串和字符串函数---2
11-3:字符串 输出 三个标准的函数:puts() fputs() printf() 1.puts()函数: #include<stdio.h> #define DEF "I ...
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- SQL字符串函数
LEN() :计算字符串长度(字符的个数.)datalength();//计算字符串所占用的字节数,不属于字符串函数.测试varchar变量与nvarchar变量存储字符串a的区别.见备注1.LOWE ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- TSQL 字符串函数:截断和查找
字符串截断函数是指:Stuff 和 SubString,字符串查找函数是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字符串函数,用于截取特定长度的子串. SU ...
- c#编程基础之字符串函数
c#常用的字符串函数 例一: 获取字符串的大小写函数 ToLower():得到字符串的小写形式 ToUpper():得到字符串的大写形式 注意: 字符串时不可变的,所以这些函数都不会直接改变字符串的内 ...
- SQLSERVER常见系统函数之字符串函数(一)
好久没有写博客了,这段时间准备写一下字符串函数 QQ群: 499092562:欢迎交流 字符串函数: 1.LEN(需要获取长度的字符串) 返回:字符串的长度 示例: SELECT LEN('小搬运工很 ...
- python笔记-字符串函数总结
字符串函数: chr() 数字转ASCII chr(96)="a" ord() ASCII转数字 ord("a")=96 isspace() 判断是否为空格 s ...
- Sql Server函数全解<一>字符串函数
阅读目录 1.ASCII()函数 2.CHAR()函数 3.LEFT()函数 4.RIGHT()函数 5.LTRIM()函数 6.RTRIM()函数 7.STR()函数 8.字符串逆序的函数REVER ...
随机推荐
- 使用SunnyUI的datagridview常用代码(个人常用)
1.窗体加载时初始化grid private void LayOut() { dgv.Font = new System.Drawing.Font("微软雅黑", 9F); dgv ...
- github及git入门笔记
1 github https://github.com/ 1.1 github注册 进入官方 https://github.com/ 首页,点击如下图片中sign up按钮,按照提示信息注册即可. 注 ...
- 07#Web 实战:实现 GitHub 个人主页项目拖拽排序
实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个.本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程. ...
- day29 jQuery选择器 & jquery属性操作 & jquery DOM元素 操作与遍历
简介 jQuery,顾名思义,就是javascript和query(查询),即辅助javascript开发的库,本质就是一个js文件: jQuery是一个js函数库,是目前全球范围内最流行.用的最多的 ...
- 分布式日志:Exceptionless的安装与部署
安装步骤 首先exceptionless依赖elasticsearch,而elasticsearch需要java环境,所以先安装jdk jdk下载地址:https://www.oracle.com/t ...
- frp内网穿透(已验证)
# 云服务器frp内网穿透教程 软件源码在https://github.com/fatedier/frp/releases上,根据系统类型,按需下载 教程术语描述 > A 是有固定IP的云服务器 ...
- WCH沁恒 CH37系列芯片选型以及常见问题的处理(CH376/CH378)
选型 型号 接口 功能 备注 电源 CH372 并口 USB_Device 全速 USB 设备接口,兼容 USB V2.0 3.1-3.6 4.2-5.4 CH374 SPI/并口 Host/Devi ...
- 简单体验一个高性能,简单,轻量的ORM库- Dapper (无依赖其它库,非常方便高效)
步骤1)引入该ORM库. 使用Nuget搜索"Dapper"安装或者直接从github上下载源码 (https://github.com/StackExchange/Dapper ...
- 【Vue3.0】关于 script setup 语法糖的用法
script setup - 简介 先来看一看官网关于 <script setup> 的介绍: 要彻底的了解 setup 语法糖,你必须先明确 setup() 这个 组合式API 官网中对 ...
- P7368 [USACO05NOV]Asteroids G
题面 贝茜想在 \(N\times N\) 的网格中驾驶她的宇宙飞船.网格中有 \(K\) 个小行星.要使驾驶过程愉快,就必须把这些小行星全部消除. 贝茜有一个武器,可以以一个单位代价消除一行或一列的 ...