前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python--字符串、函数、异常处理、面向对象

Python--字符串、函数、异常处理、面向对象

作者头像
aruba
发布2022-09-08 15:12:29
4300
发布2022-09-08 15:12:29
举报
文章被收录于专栏:android技术android技术

接着上次的Python--数据类型、循环、运算符、容器的使用,首先扩展下字符串操作

一、字符串

字符串的操作也是我们开发中使用最频繁的操作,字符串的内存和列表一样,是一片连续的,python中字符串也是不可变的

1. 查找子串索引

index()rindex()方法分别对应从左开始查找和从右开始查找子串:

代码语言:javascript
复制
s = 'hello'

print(s.index('l'))
print(s.rindex('l'))

运行结果:

但可惜的是如果子串不存在,这两个方法会抛出异常:

代码语言:javascript
复制
s = 'hello'

print(s.index('a'))
print(s.rindex('a'))

运行结果:

使用find()rfind()方法则不会抛出异常,找不到返回-1

代码语言:javascript
复制
s = 'hello'

print(s.find('a'))
print(s.rfind('a'))

运行结果:

2. 大小写转换
2.1 大小写全部转换

upper()lower()方法分别对应将字符串全部转为大写和小写:

代码语言:javascript
复制
print('hello'.upper())
print('WORld'.lower())

运行结果:

2.2 大小写反转

swapcase()方法将字符串的大小写反转:

代码语言:javascript
复制
print('WORld'.swapcase())

运行结果:

2.3 首字母大写

capitalize()方法将字符串的首字符转换为大写,其余字符转换为小写:

代码语言:javascript
复制
print('this is a Dog'.capitalize())

运行结果:

title()方法将每个单词的首字符大写,其他字符小写:

代码语言:javascript
复制
print('this is a DoG'.title())

运行结果:

3. 字符串对齐
3.1 字符串居中

center()方法将字符串居中,需要指定新的字符串的宽度,并且可以指定填充符,默认为空格

代码语言:javascript
复制
print("world".center(20))
print("world".center(20, "$"))

运行结果:

3.2 字符串左右对齐

ljust()方法将字符串左对齐,参数和center()方法相同:

代码语言:javascript
复制
print("world".ljust(20, "$"))

运行结果:

rjust()方法将字符串右对齐,参数和center()方法相同:

代码语言:javascript
复制
print("world".rjust(20, "$"))

运行结果:

4. 字符串分割

split()方法将字符串按照指定的分隔符进行分割,返回一个列表,还可以指定最大分割次数:

代码语言:javascript
复制
print("w o r l d".split(sep=' '))
print("w o r l d".split(sep=' ', maxsplit=2))

运行结果:

与之对应的,rsplit()方法是从右边开始分割:

代码语言:javascript
复制
print("w o r l d".rsplit(sep=' '))
print("w o r l d".rsplit(sep=' ', maxsplit=2))

运行结果:

5. 校验字符串

python内置了一些校验字符串的方法:

功能

方法

描述或例子

是否合法

isidentifier()

字符串含有除了_以外的特殊符号构成,那么不合法

是否全部由空白字符组成

isspace()

" \t ".isspace()为True

是否全部由字母组成

isalpha()

"1world".isalpha()为False

是否全部由阿拉伯数字组成

isdecimal()

"123".isdecimal()为True

是否全部由数字组成

isnumeric()

"一二三".isnumeric()为True

是否全部由数字和字母组成

isalnum()

"1world三".isalnum()为True

6. 字符串替换和合并

replace()方法将字符串中指定的子串替换为别的子串,支持替换次数:

代码语言:javascript
复制
print("1132112".replace('1', '6', 3))

运行结果:

join()方法将字符串元素的元组或列表合并为一个字符串:

代码语言:javascript
复制
print(''.join(('a', 'b', 'c')))
print('|'.join(('a', 'b', 'c')))
print(''.join(['a', 'b', 'c']))
print('|'.join(['a', 'b', 'c']))

运行结果:

7. 字符串格式化

python中字符串中使用占位符,调用%format()方法,传入对应占位符的参数,即可实现字符串的格式化

7.1 %方式

%方式,字符串的占位符和c语言用法相同:

代码语言:javascript
复制
print("我是%s,今年%d" % ("张三", 18))
print("小数点后2位的小数:%.2f" % 8)

运行结果:

7.2 format()方式

format()方式,字符串的占位符使用{}包裹索引的方式,如需特殊处理,索引后面跟上:指定格式:

代码语言:javascript
复制
print("我是{0},今年{1}".format("张三", 18))
print("小数点后2位的小数:{0:.2f}".format(8))

运行结果:

8. 字符串编码

Java中我们可以直接使用new String()指定字符串的编码,也可以使用getBytes()指定编码,将字符串转为字节数组

Python中使用encode()方法和decode()方法分别对应字符串编码成字节数组和将字节数组解码成字符串:

代码语言:javascript
复制
bys = "你好".encode(encoding="utf-8")
print(bys)
print(bys.decode(encoding="utf-8"))

运行结果:

9. 字符串操作总结

功能

方法

描述或例子

查找子串索引

index()

从左开始查找,子串不存在则抛出异常

rindex()

从右开始查找,子串不存在则抛出异常

find()

从左开始查找,子串不存在则返回-1

rfind()

从右开始查找,子串不存在则返回-1

大小写转换

upper()

将字符串全部转为大写:'hello'.upper()

lower()

将字符串全部转为小写:'WORld'.lower()

swapcase()

将字符串的大小写反转:'WORld'.swapcase()

capitalize()

将字符串的首字符转换为大写,其余字符转换为小写:'this is a Dog'.capitalize()

title()

将每个单词的首字符大写,其他字符小写:'this is a DoG'.title()

字符串对齐

center()

将字符串居中,需要指定新的字符串的宽度,并且可以指定填充符,默认为空格:"world".center(20, "$")

ljust()

将字符串左对齐:"world".ljust(20, "$")

rjust()

将字符串右对齐:"world".rjust(20, "$")

字符串分割

split()

将字符串按照指定的分隔符进行分割,返回一个列表,还可以指定最大分割次数:"w o r l d".split(sep=' ', maxsplit=2)

rsplit()

从右边开始分割:"w o r l d".rsplit(sep=' ', maxsplit=2)

校验字符串

isidentifier()

是否合法,字符串含有除了_以外的特殊符号构成,那么不合法

isspace()

是否全部由空白字符组成:" \t ".isspace()为True

isalpha()

是否全部由字母组成:"1world".isalpha()为False

isdecimal()

是否全部由阿拉伯数字组成:"123".isdecimal()为True

isnumeric()

是否全部由数字组成:"一二三".isnumeric()为True

isalnum()

是否全部由数字和字母组成:"1world三".isalnum()为True

字符串替换

replace()

将字符串中指定的子串替换为别的子串,支持替换次数:"1132112".replace('1', '6', 3)

字符串合并

join()

将字符串元素的元组或列表合并为一个字符串:''.join('a', 'b', 'c')

字符串格式化

%方式

字符串的占位符和c语言用法相同:"小数点后2位的小数:%.2f" % 8

format()方式

字符串的占位符使用{}包裹索引的方式,如需特殊处理,索引后面跟上:指定格式:"小数点后2位的小数:{0:.2f}".format(8)

字符串编码

encode()

将字符串编码成字节数组:"你好".encode(encoding="utf-8")

decode()

将字节数组解码成字符串:bys.decode(encoding="utf-8")

二、函数

python中定义函数使用def关键字,并且python中函数可以赋值给变量:

代码语言:javascript
复制
def add(a, b):
    return a + b


sum_func = add
print(sum_func(10, 20))

运行结果:

1. 传参

python中除了按照先后顺序传递参数外,还可以指定接受参数:

代码语言:javascript
复制
print(sum_func(b=10, a=20))
2. 参数默认值

函数的参数还支持默认值,并且拥有默认值的参数,在调用时可以不传:

代码语言:javascript
复制
def do(name, something="清洁"):
    print(name + "在做" + something)


do("张三")

运行结果:

3. 可变参数

python中函数的可变参数使用*号,还支持可变键值对参数,使用**,如果你熟悉c语言,你会感到很亲切:

*可变参数:

代码语言:javascript
复制
def do(*args):
    for item in args:
        print(item)


do("起床", "刷牙", "洗脸", "吃早饭")

运行结果:

**键值对可变参数:

代码语言:javascript
复制
def do(**args):
    for k in args:
        print(k, args[k])


do(张三="坐地铁上班", 李四="开车上班")

运行结果:

4. 全局变量

python中函数内定义的变量默认都是局部变量,使用global关键字可以使之成为全局变量:

代码语言:javascript
复制
def fun():
    global info1
    info1 = 'hello'


fun()
print(info1)

运行结果:

三、异常处理

1. 捕获异常

python中使用try except捕获异常:

代码语言:javascript
复制
try:
    i = 10 / 0
except Exception as e:
    print(e)

运行结果:

2. 无异常处理

循环中我们可以使用else来执行循环正常结束后的一块代码,同样try except中也可以使用else,来执行无异常发生时的一块代码:

代码语言:javascript
复制
try:
    i = 10 / 2
except:
    pass
else:
    print("无异常发生")

运行结果:

3. 有无异常都处理

finally是无论发生异常与否,都会执行:

代码语言:javascript
复制
try:
    i = 10 / 0
except Exception as e:
    print(e)
finally:
    print("执行结束")

运行结果:

4. traceback模块

该模块是python提供的异常处理模块,将异常信息异步操作,可输出到文件中:

代码语言:javascript
复制
import traceback

try:
    i = 10 / 0
except:
    traceback.print_exc()

print("程序结束")

运行结果:

四、类

1. 类的定义

python中定义类使用class关键字:

代码语言:javascript
复制
class Person:
    pass


p = Person()
2. 类的属性

python中的类也是一个对象,类的属性直接在类内部定义,外部使用类名.属性名进行访问:

代码语言:javascript
复制
class Person:
    clz_attr = "类属性"


print(Person.clz_attr)
3. 实例属性

实例对象为通过类的构造函数创建的对象,实例对象和类对象是指向与被指向的关系,python中实例对象拥有自己的属性,实例对象的属性定义在类的构造函数__init__()中:

代码语言:javascript
复制
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age


p = Person("张三", 18)
print(p.name, p.age)

运行结果:

4. 类方法

python中定义类方法需要使用@classmethod注解方法,方法内需要cls入参,该参数即为类对象,可以通过类名.方法名调用,也可以通过实例对象.方法名调用:

代码语言:javascript
复制
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def method(cls):
        print("类方法")


p = Person("张三", 18)
p.method()
Person.method()

运行结果:

5. 静态方法

python中定义类的静态方法需要使用@staticmethod注解方法,可以通过类名.方法名调用,也可以通过实例对象.方法名调用:

代码语言:javascript
复制
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def method1():
        print("静态方法")


p = Person("张三", 18)
p.method1()
Person.method1()

运行结果:

6. 实例方法

实例对象的方法默认都会带有一个self的入参,相当于Java中的this,该参数就是实例对象本身:

代码语言:javascript
复制
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def do_something(self):
        # 输出内存地址
        print(id(self))
        print(self.name, self.age)


p = Person("李四", 25)
print(id(p))
p.do_something()

运行结果:

7. 动态绑定

python中的函数也可以是一个变量,那么为实例对象赋值一个函数也是可以的:

代码语言:javascript
复制
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def do_something(self):
        # 输出内存地址
        print(id(self))
        print(self.name, self.age)


p = Person("李四", 25)

def show():
    print("打印")


# 赋值一个函数
p.show = show
p.show()

运行结果:

四、类的继承和多态

1. 类的继承

python支持多继承,定义类时指定继承的父类:

代码语言:javascript
复制
class Animal:
    pass


class Person:
    pass


class Man(Person, Animal):
    pass
2. 多态

实现多态之前,先来看下方法重写,重写父类方法直接定义即可,python中调用父类的方法使用super().方法名

代码语言:javascript
复制
class Animal:
    def eat(self):
        print("动物吃生肉")


class Person(Animal):
    def eat(self):
        super().eat()
        print("人吃生肉")


p = Person()
p.eat()

运行结果:

接着还需要定义一些父子类,以及重写共同的方法:

代码语言:javascript
复制
class Animal:
    def eat(self):
        print("动物吃生肉")


class Person(Animal):
    def eat(self):
        print("人吃生肉")


class Man(Person):
    def eat(self):
        print("男人吃猪肉")


class Women(Person):
    def eat(self):
        print("女人吃青菜")

由于python中变量为弱类型,所以函数中并不知道传入的对象是什么数据类型,这也是python中的鸭子模型,python中并不关系对象,关心的只是对象的行为,即方法的调用:

代码语言:javascript
复制
def func(obj):
    obj.eat()


func(Man())
func(Women())

运行结果:

五、模块

上面我们已经使用了trackback模块,模块其实就是封装,将一些功能封装进一个模块,供外部使用,python中导入模块有两种方式:

导入方式

描述

import 模块名 as 别名

该方式只能导入整个模块

from 模块名称 import 函数/变量/类

该方式除了模块外,还支持类、变量的导入

1. 创建模块

创建模块和新建python文件一样,我们一般将模块单独新建一个文件夹:

内容:

代码语言:javascript
复制
def A():
    print("模块A")
2. 使用模块

使用模块很简单,也没什么好说的

import方式:

代码语言:javascript
复制
import module.modulA as ma

ma.A()

运行结果:

from方式:

代码语言:javascript
复制
from module.modulA import A

A()

运行结果:

六、深浅拷贝

python中对象的拷贝,需要导入copy模块,也就两个方法:copy()deepCopy(),对应浅拷贝和深拷贝,浅拷贝只会拷贝当前实例对象,深拷贝会拷贝所有实例对象

代码语言:javascript
复制
import copy as copy

p1 = copy.copy(p)
p2 = copy.deepcopy(p)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、字符串
    • 1. 查找子串索引
      • 2. 大小写转换
        • 2.1 大小写全部转换
        • 2.2 大小写反转
        • 2.3 首字母大写
      • 3. 字符串对齐
        • 3.1 字符串居中
        • 3.2 字符串左右对齐
      • 4. 字符串分割
        • 5. 校验字符串
          • 6. 字符串替换和合并
            • 7. 字符串格式化
              • 7.1 %方式
              • 7.2 format()方式
            • 8. 字符串编码
              • 9. 字符串操作总结
              • 二、函数
                • 1. 传参
                  • 2. 参数默认值
                    • 3. 可变参数
                      • 4. 全局变量
                      • 三、异常处理
                        • 1. 捕获异常
                          • 2. 无异常处理
                            • 3. 有无异常都处理
                              • 4. traceback模块
                              • 四、类
                                • 1. 类的定义
                                  • 2. 类的属性
                                    • 3. 实例属性
                                      • 4. 类方法
                                        • 5. 静态方法
                                          • 6. 实例方法
                                            • 7. 动态绑定
                                            • 四、类的继承和多态
                                              • 1. 类的继承
                                                • 2. 多态
                                                • 五、模块
                                                  • 1. 创建模块
                                                    • 2. 使用模块
                                                    • 六、深浅拷贝
                                                    相关产品与服务
                                                    容器服务
                                                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                                    领券
                                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档