python函数基础(3)

第1章 编码补充
1.1 字符编码对照表
1.2 编码特性
1.4 encode/decode
第2章 集合
2.1 特点
2.2 【重点】作用:去重
2.3 常用操作
2.3.1 删除
2.3.2 交集判断-isdisjoint
2.4 列表转换集合
2.5 集合转换列表
第3章 深浅copy
3.1 共用内存地址
3.2 copy参数
3.3 copy特性
3.3.1 例:浅copy
3.3.2 例:深copy
3.3.3 切片浅copy
第4章 文件操作
4.1 文件打开方式-open
4.2 文件句柄
4.3 读r
4.3.1 默认:方式全部读出来
4.3.2 read(n):读一部分
4.3.3 rb
4.3.4 readline()
4.3.5 readlines()
4.3.6 for 循环
4.3.7 r+ r+b
4.4 写:w
4.4.1 wb
4.4.2 图片的读写
4.4.3 图片的写入
4.4.4 w+
4.4.5 w+b
4.5 追加:a
4.5.1 ab
4.5.2 a+
4.5.3 a+b
4.6 其他操作方法
4.6.1 常用参数列表
4.6.2 with open
4.6.3 更改文件
4.6.4 版本升级
第5章 函数
5.1 初识函数
5.2 函数返回值
5.2.1 return
5.2.2 例:
5.3 函数传参
5.3.1 形参
5.3.2 实参
第6章 拾遗
6.1 'is'/'id'/'=='区别
6.2 小数据池

 

第1章 编码补充

1.1 字符编码对照表

编码格式

别名

表示内容

例举

ascii

英文

可以表示,数字,字母 特殊字符;

字节:8位表示一个字节;

字符:是你看到的内容的最小组成单位

abc : a 一个字符。

中国:中 一个字符

a : 0000 1011

unicode

万国码

可以表示万国语言;

字节:32位表示一个字节

a : 0000 1011 0000 1011 0000 1011 0000 1011

中: 0000 1011 0000 1111 0000 1011 0000 1011

gbk

国标

英文表示用一个字节

中文表示用两个字节

a: 0000 1011

中:0000 1011 0000 1011 两个字节

utf-8

通用

最少用8位表示一个字符

a: 0000 1011

欧洲: 0000 1011 0000 1011

亚洲中:0000 1011 0000 1011 0000 1011

 

1.2 编码特性

u  不同编码之间的二进制是不能互相识别的。

u  对于文件的存储,及传输 不能是unicode的编码。

u  bytes:内部编码方式(非unicode,utf-8,gbk.gb2312...)

u  str : 内部编码方式unicode

1.3 例:

# !/usr/bin/env python

# -*- coding:utf-8 -*-

s1 = 'alex'

b1 = s1.encode('utf-8')

print(b1)

b1 = b'alex'

print(s1.capitalize())

print(b1.capitalize())

 

s1 = '中国'

b1 = s1.encode('utf-8')

print(b1)

输出

b'alex'

Alex

b'Alex'

b'\xe4\xb8\xad\xe5\x9b\xbd'

1.4 encode/decode

s1 = 'alex'

# str ---> bytes encode 编码

b1 = s1.encode('utf-8')

print(b1)

#bytes---> str  decode 解码

s2 = b1.decode('utf-8')

print(s2)

输出

b'alex'

alex

第2章 集合

2.1 特点

l  每个元素必须是不可变类型(可hash,可作为字典的key)

l  没有重复的元素,去重

l  无序,常用关系测试

2.2 【重点】作用:去重

符号一览表

符号

定义

|

合集

&

交集

-

差集

^

对称差集

==

相同集合

>,>= ,<,<=

父集,子集

 

练习:

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}

linuxs={'wupeiqi','oldboy','gangdan'}

#求出即报名python又报名linux课程的学员名字集合

print(pythons & linuxs)

#求出所有报名的学生名字集合

print((pythons | linuxs))

print(len(pythons | linuxs))

#求出只报名python课程的学员名字

print(pythons - linuxs)

#求出没有同时这两门课程的学员名字集合

print(pythons ^linuxs)

输出

C:\python3\python.exe D:/python/untitled/two_day.py

{'wupeiqi', 'gangdan'}

{'biubiu', 'gangdan', 'alex', 'oldboy', 'wupeiqi', 'yuanhao', 'egon'}

7

{'egon', 'biubiu', 'yuanhao', 'alex'}

{'biubiu', 'oldboy', 'alex', 'egon', 'yuanhao'}

2.3 常用操作

2.3.1 删除

sl={1,2,3,'a',4}

print(sl.pop())

sl.remove('a')

sl.remove('as')

print(sl)

输出:

Traceback (most recent call last):

  File "D:/python/untitled/two_day.py", line 233, in <module>

    sl.remove('as')

KeyError: 'as'

注意:

l  pop随机删除,并返回删除的结果

l  remove 单纯的删除,不会返回结果,如果删除的元素不在则报错

2.3.2 交集判断-isdisjoint

sl={1,2,3,'a',4}

s2={4,5}

print(sl.isdisjoint(s2))

如果sl和s2没有交集则返回True

2.4 列表转换集合

l1 = {1,2,3,4,52,33,33,4,4,5}

print(set(l1))

输出

C:\python3\python.exe D:/python/untitled2/python_auto/lianxi3.py

{1, 2, 3, 4, 33, 5, 52}

2.5 集合转换列表

set = {1,2,3,4,52,33,33,4,4,5}

print(list(set))

输出

C:\python3\python.exe D:/python/untitled2/python_auto/lianxi3.py

[1, 2, 3, 4, 33, 5, 52]

第3章 深浅copy

3.1 共用内存地址

s1 = [1, 2, 3]

s2 = s1  # 共用一个

s1.append(666)

print(s1, s2)

输出

[1, 2, 3, 666] [1, 2, 3, 666]

[1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

3.2 copy参数

s1 = [1, 2, 3]

s2 = s1.copy()

s1.append(666)

print(s1, s2)

输出

[1, 2, 3, 666] [1, 2, 3]

3.3 copy特性

u  浅copy:使用copy参数,第一层各自独立,第二层开始,共用一个内存地址

u  深copy:调用copy模块,无论多少层,都是相互独立的

3.3.1 例:浅copy

s1 = [1, 2, 3,[11,22]]

s2 = s1.copy()

s1[-1].append(666)

print(s1, s2)

print(id(s1), id(s2))

print(id(s1[-1]), id(s2[-1]))

输出

s1 = [1, 2, 3,[11,22]]

s2 = s1.copy()

s1[-1].append(666)

print(s1, s2)

print(id(s1), id(s2))

print(id(s1[-1]), id(s2[-1]))

3.3.2 例:深copy

import copy

##第一层追加

s1 = [1, 2, 3,[11,22]]

s2 = copy.deepcopy(s1)

s1.append(666)

print(s1, s2)

##第二层追加

s1 = [1, 2, 3,[11,22]]

s2 = copy.deepcopy(s1)

s1[-1].append(666)

print(s1, s2)

输出

[1, 2, 3, [11, 22], 666] [1, 2, 3, [11, 22]]

[1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22]]

 

3.3.3 切片浅copy

1)第一层追加

s1 = [1, 2, 3, [11, 22]]

s2 = s1[:]

s1.append(666)

print(s1, s2)

输出

C:\python3\python.exe "D:/python/untitled2/python_3/05 深浅copy.py"

[1, 2, 3, [11, 22], 666] [1, 2, 3, [11, 22]]

 

2)第二层追加

s1 = [1, 2, 3, [11, 22]]

s2 = s1[:]

# s1.append(666)

s1[-1].append(666)

print(s1, s2)

输出

C:\python3\python.exe "D:/python/untitled2/python_3/05 深浅copy.py"

[1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

第4章 文件操作

 

4.1 文件打开方式-open

解释:open()调用的内置函数,内置函数调用的系统内部的open,

#!/usr/bin/env python

# -*- coding:utf-8 -*-

f1 = open(r'd:/superman.txt', encoding='utf-8', mode='r')

print(f1.read())

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

天空没有留下我的痕迹,但我已飞过.....

                                ______泰戈尔

 

4.2 文件句柄

u  解释:f1 文件句柄,又称之为(f,file,file_hander,f_h....)

u  说明:一切对文件进行的操作都是基于文件句柄f1.

u  执行流程:

        1.打开文件,产生文件句柄。

        2.对文件句柄进行操作。

        3.关闭文件句柄。

u  报错原因:

        1.编码错误编码不一致,前面加r或者在加上// 进行转义解决路径问题

            UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 15: illegal multibyte sequence

        2.路径错误。

            SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

        3.\未转义。

                    r'd:/superman.txt',

                    'd://superman.txt',

4.3 读r

4.3.1 默认:方式全部读出来

f1 = open('log1', encoding='utf-8')

content = f1.read()

print(content)

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

111666333222

4.3.2 read(n):读一部分

f1 = open('log1', encoding='utf-8')

content = f1.read(3)

print(content)

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

111

4.3.3 rb

解释:

u  r 模式 read(n)  n 按照字符读取。

u  rb 模式 read(n)  n 按照字节读取。

例:

f1 = open('log1', mode='rb')

print(f1.read(3).decode('utf-8'))

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

例:

f1 = open('log1', mode='rb')

print(f1.read(4).decode('utf-8'))

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

Traceback (most recent call last):

  File "D:/python/untitled2/python_3/06 文件操作.py", line 27,

4.3.4 readline()

解释:按行读取

f1 = open('log1', encoding='utf-8')

print(f1.readline())

print(f1.readline())

print(f1.readline())

f1.close()

输出

文件操作.py"

111666333222

 

12321321321

 

21312321321321

4.3.5 readlines()

解释:全部读出来并显示为列表的形式

f1 = open('log1', encoding='utf-8')

print(f1.readlines())

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

['111666333222\n', '12321321321\n', '21312321321321']

4.3.6 for 循环

f1 = open('log1', encoding='utf-8')

for line in f1:

    print(line)

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

111666333222

 

12321321321

 

21312321321321

4.3.7 r+ r+b

解释:r+ 读写规则先读后写

f1 = open('log1', encoding='utf-8', mode='r+')

print(f1.read())光标读到最后

f1.write('777')在最后插入777

print(f1.read())光标移动到最后所以这一次读没有输出

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

6664546789

12321321321

21312321321321#并没有777而是再源文件中生成

4.4 写:w

u  没有文件,新建文件写入内容。

u  有原文件,先清空内容,在写入新内容。

例:

f1 = open('log2', encoding='utf-8', mode='w')

f1.write('fdksagdfsa')

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

 

Process finished with exit code 0

清空源文件,生成新的字符串fdksagdfsa

4.4.1 wb

4.4.2 图片的读写

f1 = open('1.jpg', mode='rb')

content = f1.read()

print(content)

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x02\x01\x01\x01\x01\x01\x02\x01\x01\x01\x02\x02\x02\x02\x02\x04\x03\x02\x02\x02\x02\x05\x04\x04\x03\x04\x06\x05\x06\x06\x06\x05\x06\x06\x06\x07\t

4.4.3 图片的写入

f1 = open('1.jpg', mode='rb')

content = f1.read()

f2 = open('2.jpg', mode='wb')

f2.write(content)

f1.close()

f2.close()

图片二被清空,图片1写入图片2

4.4.4 w+

解释:先读后写

f1 = open('log2', encoding='utf-8', mode='w+')

f1.write('superman')

f1.seek(0)

print(f1.read())

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

superman

先清空在写入Superman

4.4.5 w+b

4.5 追加:a

解释 :没有文件,新建文件写入内容

f1 = open('log3', encoding='utf-8', mode='a')

f1.write('alex 666')

f1.write('\nalex 666')

f1.close()

输出

alex 666

alex 666

 

4.5.1 ab

解释:b参数的操作都是非文字类的文件

4.5.2  a+

解释:在文件末尾追加写入

f1 = open('log3', encoding='utf-8', mode='a+')

f1.write('python')

f1.seek(0)

print(f1.read())

f1.close()

输出

C:\python3\python.exe "D:/python/untitled2/python_3/06 文件操作.py"

alex 666

alex 666python

4.5.3 a+b

4.6 其他操作方法

4.6.1 常用参数列表

常用参数

解释

readable

是否可读

writable

是否可写

f1.seek(12)

任意调整

f1.seek(0,2)

光标调整到最后

f1.seek(0)

光标调整到开头

f1.tell()

告诉光标的位置

f1.truncate(3)

按照字节对原文件进行截取必须在a 或 a+ 模式

 

f1 = open('log3', encoding='utf-8', mode='a+')

print(f1.readable())

print(f1.writable())

f1.close()

输出

True

True

例:

f1 = open('log3', encoding='utf-8', mode='a')

print(f1.readable())

print(f1.writable())

f1.close()

输出

True

False

4.6.2 with open

解释:不用关闭文件句柄

with open('log1', encoding = 'utf-8') as f1,\

    open('log2', encoding='utf-8', mode='w') as f2:

    con f2.write(content) tent = f1.read()

4.6.3 更改文件

u  以读模式打开原文件。

u  以写的模式打开一个新文件。

u  将原文件读出按照要求修改将修改后的内容写入新文件

u  删除原文件。

u  将新文件重命名原文件。

例:

import os

with open('file', encoding='utf-8') as f1,\

    open('file.bak', encoding='utf-8', mode='w') as f2:

    old_content = f1.read()

    new_content = old_content.replace('alex', 'SB')

    f2.write(new_content)

 

os.remove('file')

os.rename('file.bak', 'file')

 

4.6.4 版本升级

import os

with open('file', encoding='utf-8') as f1,\

    open('file.bak', encoding='utf-8', mode='w') as f2:

    for line in f1:

        new_line = line.replace('SB','alex')

        f2.write(new_line)

os.remove('file')

os.rename('file.bak', 'file')

第5章 函数

5.1 初识函数

u  目的:解决代码重复性问题,提高可读性

u  函数格式:

       '''

       def 关键字 函数名():

              函数体

              函数执行:函数名()

       函数:以功能为导向。

       '''

5.2 函数返回值

5.2.1 return

u  终止函数。

u  给函数的执行者返回值

    return  或者 return None

    return 单个值

    return 多个值 会将多个值放到一个元组中,将元组返回个函数的执行者

5.2.2 例:

s = 'lkfjsjulkjdgjdsf'

def my_len():

    count = 0

    for i in s:

        count += 1

    return count

 

print(my_len())

5.3 函数传参

5.3.1 形参

 

解释:形式参数

def my_len(argv):  # 形式参数 ,形参

 

    count = 0

    for i in argv:

        count += 1

    return count

l1 = [1, 2, 3, 4, 5]

# my_len(s)  # 实际参数, 实参

print(my_len(l1))

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

5

5.3.2 实参

u  位置参数  按照顺序一一对应

u  关键字传参  一一对应。

u  混合参数。(位置参数,关键字参数) 关键字参数必须在位置参数后面

u  动态参数。 *args, **kwargs 万能参数

      args:所有的位置参数,放在一个元组中。

       kwargs:所有的关键字参数,放在一个字典中。

 

5.3.3 例:位置参数

def func1(a, b, c):

    print(a, b, c)

func1(1, 2, 'alex')

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

1 2 alex

5.3.4 例:关键字参数

def func2(a, b):

    print(a, b)

func2(b=2, a=3)

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

3 2

5.3.5 例:混合参数

def func3(a, b, c, d):

    print(a, b, c, d)

func3(1,2,d=3,c=5)

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

1 2 5 3

5.3.6 例:比较大写输出最大

def max(a, b): return a if a > b else b

ret = 1 if 2 > 1 else 6

print(max(10, 2))

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

10

5.3.7 例:动态参数

u  *args表示单个元素

u  **kwargs表示字典

例1)

def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

    print(args)

    print(kwargs)

func3(1, 2, 3, 'alex', c=6, name='wusir', age='21')

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

(1, 2, 3, 'alex')

{'c': 6, 'name': 'wusir', 'age': '21'}

 

例2)

def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

    print(args)

    print(kwargs)

func3(*[1, 2, 3],*(22, 33))  #函数的执行的时候 * 代表打散。

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

(1, 2, 3, 22, 33)

{}

 

例3)

def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

    print(args)

    print(kwargs)

func3(**{'name':"alex"},**{'age':23})  #函数的执行的时候 * 代表打散。

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

()

{'name': 'alex', 'age': 23}

 

例4)

def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。

    print(args)

    print(kwargs)

func3(1, 2, 3, 22, 33)  #函数的执行的时候 * 代表打散。

输出

C:\python3\python.exe "D:/python/untitled2/python_3/07 函数的初识.py"

(1, 2, 3, 22, 33)

{}

第6章 拾遗

6.1 'is'/'id'/'=='区别

l  == 数值比较

l  is 比较的是内存地址

l  id 测试的是内存地址

6.2 小数据池

解释:在一定范围内的数字或者字符串定义的变量都放在一个内存地址中,节省内存空间

l  int: [-5:256]长度都是存放在一个地址池中

l  str:不能含有特殊字符;单个元素*int(20)不能超过20;一般情况下设置的字符串变量都在一个小数据池中

例1:涉及内存地址的都在在终端中测试

 

例2:

 

posted @ 2018-05-24 21:49  王晓冬  阅读(331)  评论(0编辑  收藏  举报