Python 日常碎碎念(字符串处理,面向对象)

python 字符串

一、字符串前面加u,r,b,f的含义

r: 去掉反斜杠的转移机制。

​ u:后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。

​ r:去掉反斜杠的转移机制。

​ b:前缀表示:后面字符串是bytes 类型。(网络编程中,服务器和浏览器只认bytes 类型数据。)

# 字符串的内容都是 ASCII 字符,那么直接在字符串前面添加b前缀就可以转换成 bytes,非ASCII字符加b会报错
print(b'asdfasfd12')

在 Python3 中,bytes 和 str 的互相转换方式是

str.encode('utf-8')
bytes.decode('utf-8')   

Bytes 与 字符串的区别,Python bytes 类型用来表示一个字节串。“字节串“不是编程术语,是我自己“捏造”的一个词,用来和字符串相呼应。

bytes 是 Python 3.x 新增的类型,在 Python 2.x 中是不存在的。

字节串(bytes)和字符串(string)的对比

  • 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
  • 字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
  • 字节串和字符串都是不可变序列,不能随意增加和删除数据。

使用不同方式创建 bytes 对象:

#通过构造函数创建空 bytes
b1 = bytes()
#通过空字符串创建空 bytes
b2 = b''
#通过b前缀将字符串转换成 bytes
b3 = b'http://c.biancheng.net/python/'
print("b3: ", b3)
print(b3[3])
print(b3[7:22])
#为 bytes() 方法指定字符集
b4 = bytes('C语言中文网8岁了', encoding='UTF-8')
print("b4: ", b4)
#通过 encode() 方法将字符串转换成 bytes
b5 = "C语言中文网8岁了".encode('UTF-8')
print("b5: ", b5)

bytes 类也有一个 decode() 方法,通过该方法可以将 bytes 对象转换为字符串:

#通过 decode() 方法将 bytes 转换成字符串
str1 = b5.decode('UTF-8')
print("str1: ", str1)

二、关于字符串的处理

2.1 处理字符串中的引号
1) 对引号进行转义,在引号前面添加反斜杠\就可以对引号进行转义,让 Python 把它作为普通文本对待,例如:
str1 = 'I\'m a great coder!'
str2 = "引文双引号是\",中文双引号是“"
print(str1)
print(str2)
2) 使用不同的引号包围字符串,如果字符串内容中出现了单引号,那么我们可以使用双引号包围字符串,反之亦然。例如:

如果字符串内容中出现了单引号,那么我们可以使用双引号包围字符串,反之亦然。例如:

str1 = "I'm a great coder!"  #使用双引号包围含有单引号的字符串
str2 = '引文双引号是",中文双引号是“' #使用单引号包围含有双引号的字符串
print(str1)
print(str2)
3)Python长字符串
"""长字符串内容"""
'''长字符串内容'''

Python 函数

一、Python None

​ 对于所有没有 return 语句的函数定义,Python 都会在末尾加上 return None,使用不带值的 return 语句(也就是只有 return 关键字本身),那么就返回 None。

二、Python局部函数及用法(包含nonlocal关键字)

​ 就如同全局函数返回其局部变量,就可以扩大该变量的作用域一样,通过将局部函数作为所在函数的返回值,也可以扩大局部函数的使用范围。

#全局函数
def outdef ():
    #局部函数
    def indef():
        print("调用局部函数")
    #调用局部函数
    return indef
#调用全局函数
new_indef = outdef()
#调用全局函数中的局部函数
new_indef()

Python局部函数及用法(包含nonlocal关键字)

局部函数的作用域,可以总结为:如果所在函数没有返回局部函数,则局部函数的可用范围仅限于所在函数内部;反之,如果所在函数将局部函数作为返回值,则局部函数的作用域就会扩大,既可以在所在函数内部使用,也可以在所在函数的作用域中使用。

1)nonlocal 关键字的使用
#全局函数
def outdef ():
    name = "所在函数中定义的 name 变量"
    #局部函数
    def indef():
        nonlocal name
        print(name)
        #修改name变量的值
        name = "局部函数中定义的 name 变量"
    indef()
#调用全局函数
outdef()

Python 函数还支持赋值、作为其他函数的参数以及作为其他函数的返回值。

​ 特别说明下,Python函数支持将其他函数作为另一个函数的参数:

def add (a,b):
    return a+b
def multi(a,b):
    return a*b
def my_def(a,b,dis):
    return dis(a,b)
#求 2 个数的和
print(my_def(3,4,add))
#求 2 个数的乘积
print(my_def(3,4,multi))

​ 关于函数返回多个值,只想取其中一个的做法

2) pyhton 闭包函数

闭包并不只是一个python中的概念,在函数式编程语言中应用较为广泛。

维基上对闭包的解释:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。

def my_func(*args):
    fs = []
    for i in xrange(3):
        def func():
            return i * i
        fs.append(func)
    return fs

# my_func返回的多个闭包函数的一个list
fs1, fs2, fs3 = my_func()
print fs1()
print fs2()
print fs3()

正确写法:

def my_func(*args):
    fs = []
    for i in xrange(3):
        def func(_i = i):
            return _i * _i
        fs.append(func)
    return fs

理解Python闭包概念

3)Python lambda表达式(匿名函数)及用法

lambda 表达式,其就是简单函数(函数体仅是单行的表达式)的简写版本。相比函数,lamba 表达式具有以下 2 个优势:

  • 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
  • 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。

关于Python魔法方法

在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”(魔术方法)

python的魔术方法大全

Python -面向对象

一、Python self用法详解

在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数。

​ 事实上,Python 只是规定,无论是构造方法还是实例方法,最少要包含一个参数,并没有规定该参数的具体名称。之所以将其命名为 self,只是程序员之间约定俗成的一种习惯,遵守这个约定,可以使我们编写的代码具有更好的可读性(大家一看到 self,就知道它的作用)。

Python 总的self相当于Java中的this,每一个对象都有自己的self

Pyhton中是没有像Java中的static变量的。

在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型:

  1. 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量;
  2. 类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;
  3. 类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。

导入的是该模块中那些名称不以下划线(单下划线“”或者双下划线“_”)开头的变量、函数和类。因此,如果我们不想模块文件中的某个成员被引入到其它文件中使用,可以在其名称前添加下划线。

你可能感兴趣的:(Python 日常碎碎念(字符串处理,面向对象))