python的学习之路day3
大纲
1、汉字编码
2、浅拷贝与深拷贝
3、函数
4、return
5、函数的基本参数
6、format
7、三元运算(三目运算)
8、python的内置函数
abs() all() any() bool() bin() oct() hex()
bytes()
callable()
ord() chr()
compile() exec() eval()
dir() help()
filter()
9、open函数
汉字编码
汉字的字节:
utf-8 一个汉字:三个字节
gbk 一个汉字:二个字节
一个字节等于八位;1byte=8bits
对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。关于这个深浅拷贝为了方便自己,所以复制了老师的
浅拷贝与深拷贝
1、赋值
赋值,只是创建一个变量,该变量指向原来内存地址,如:
1
2
3
|
n1 = { "k1" : "wu" , "k2" : 123 , "k3" : [ "alex" , 456 ]} n2 = n1 |
2、浅拷贝
浅拷贝,在内存中只额外创建第一层数据
1
2
3
4
5
|
import copy n1 = { "k1" : "wu" , "k2" : 123 , "k3" : [ "alex" , 456 ]} n3 = copy.copy(n1) |
3、深拷贝
深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)
1
2
3
4
5
|
import copy n1 = { "k1" : "wu" , "k2" : 123 , "k3" : [ "alex" , 456 ]} n4 = copy.deepcopy(n1) |
函数
函数分为自定义函数,和python的内置函数
定义:
函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用其函数名即可
语法定义:
def hello():#hello是函数名,def关键字用于创建函数
print("hello world...") hello()#调用函数
函数的执行过程:
1、def关键字,创建函数
2、函数名
3、()
4、函数体(函数体默认是不执行的,当我调用时执行)
5、返回值
函数的特性:
1、减少重复代码
2、是程序变的可扩展
3、是程序变得已维护
return返回值的使用:
def ret():
print("hello world")
return "success"#在函数中,一旦执行了return后,函数执行过程立即终止,返回值将会赋给我们定义的函数
print(123)#123是不会执行的
r = ret()
print(r) hello world
success
return默认的返回值:
def ret():
print(123)
r = ret()
print(r) 123
None#python默认的返回值为none
函数的基本参数:
1、基本参数 == 形参、实参
2、默认参数(必须放置参数的最后面)
3、指定参数 == 相当于a="b"、b="a"
4、动态参数:
* == 相当于一个元组
** == 相当于一个字典
形参、实参定义方法:
def parameter(p1, p2): # 在定义时被称为形参,相当于他是一个变量
print("name:", p1, "age:", p2)
return "..."
parameter("smelond", 16) # 在调用时我输入的参数被称为实参,大概就是他是一个实际的值,反正我是这样理解的 name: smelond age: 16
默认参数:
def parameter(p1, p2=""): # 默认参数必须放置在形参列表的最后面
print("name:", p1, "age:", p2)
return "..."
parameter("smelond") #在调用过程中,如果我不传参进去他就会输出默认的值 name: smelond age: 16
指定参数:
def parameter(p1, p2): # 形参的常规写法
print("name:", p1, "age:", p2)
return "..."
parameter(p2 = "smelond", p1 = 16) #在调用过程时,我们只需要指定形参名即可 name: 16 age: smelond
动态参数
* 接收N个实际参数(元组):
def n_p(*args):#只要在前面加上一个*,他可以接受N个实际参数
print(args, type(args))
n_p(11, 22, 33) (11, 22, 33) <class 'tuple'>#输出时会把他们转换为元组
def n_p(*args):
print(args, type(args))
li = [11, 22, 33, "smelond"] # 给了一个列表
n_p(li, "") ([11, 22, 33, 'smelond'], '') <class 'tuple'>#就算是列表他也只当了一个元素,可以看到输出时在元组里面有一个列表
def n_p(*args):
print(args, type(args))
li = [11, 22, 33, "smelond"] # 给了一个列表
n_p(*li) # 如果在实参前面加上*,在输出时他会像for循环一样,把每一个列表循环到元组里面,从而有了多个元素
li = "smelond" # 字符串也一样
n_p(*li) (11, 22, 33, 'smelond') <class 'tuple'>
('s', 'm', 'e', 'l', 'o', 'n', 'd') <class 'tuple'>
**接收N个实际参数(字典):
def d_p(**kwargs): # **他接收的是一个字典
print(kwargs)
d_p(k1="v1", k2="v2")#以key value的方式传参 {'k1': 'v1', 'k2': 'v2'}
def d_p(**kwargs): # **他接收的是一个字典
print(kwargs)
dic = {"k1": "v1", "k2": "v2"}#定义一个字典
d_p(k1=dic) # 因为在这个地方v为一个字典,所以输出时会嵌套一个字典 {'k1': {'k1': 'v1', 'k2': 'v2'}}
万能参数:
def d_p(*args, **kwargs): # 接收一个元组和一个字典
print(args)
print(kwargs)
d_p(11, 22, 33, k1="v1", k2="v2") # 将他俩同时传入 (11, 22, 33)
{'k1': 'v1', 'k2': 'v2'}
利用动态参数实现format功能:
# 一个*的使用方法(列表)
s1 = "i am {0}, age {1}".format("smelond", 16) # format会将smelond副歌0,16赋给1,
print(s1)
li = ["smelond", 16]
s2 = "i am {0}, age {1}".format(*li) # 因为是列表,所以加上*号输出效果是一样的
print(s2) # 两个*的使用方法(字典)
s3 = "i am {name}, age {age}".format(name="smelond", age=16) # 如果前面括号里面为什么,我们的key值就得为什么
print(s3)
dic = {"name": "smelond", "age": 16}
s4 = "i am {name}, age {age}".format(**dic) # 在这个地方得加上**因为他是一个字典
print(s4) i am smelond, age 16
i am smelond, age 16
i am smelond, age 16
i am smelond, age 16
三元运算(三目运算)表达式:
# 以下是if_else的常规写法
if 1 == 1:
name = "smelond"
else:
print("age") # 三元运算就可以写简单的if_else
name = "smelond" if 1 == 1 else "age" # 意思是说,如果1 == 1,那么将"smelond"赋给变量name,否者将age赋给name
print(name) smelond
lambda表达式:
# lambda 写一些简单的函数可以用lambda表达式
def f1(a1):
return a1 + 100 r1 = f1(10)
print(r1) # def的简单常规写法 # 如果用lambda表达式:
f2 = lambda a1, a2=10: a1 + a2 + 100 # 最前面的f2代表函数名,冒号前面的是形参,可以看到在这个里面也可以个形参加默认值,冒号后面的就是简单的运算
r2 = f2(10)
print(r2) 110
120
python的一些内置函数:
# 内置函数一
# abs() 返回绝对值
n = abs(-1)
print(n) # # all()
# any()
# 0,None,"",[],{},() == 全部都为False # all()所有为真,才为真
n = all([1, 2, 3, 4, None])
print(n) # # any()只要有一个为真,就为真
n = any([1, [], []])
print(n) # bool值,返回真假
print(bool(0))
print(bool(True)) # ascii() #自动执行对象的__repr__方法 # bin() 接收一个十进制,会把十进制转换为二进制(0b)
print(bin(5))
# oct() 接收一个十进制,会把十进制转换为八进制(0o)
print(oct(9))
# hex() 接收一个十进制,会把十进制转换为十六进制(0x)
print(hex(15)) 1
False
True
False
True
0b101
0o11
0xf
一
# 内置函数二 # 字符串转换为字节类型
# bytes(只要转换为字符串,按照什么编码),字符串只要想转换字节,就要用bytes
n = bytes("编码", encoding="utf-8")
print(n)
n = bytes("编码", encoding="gbk")
print(n) # 将字节转换为字符串
st = str(b'\xe7\xbc\x96\xe7\xa0\x81', encoding="utf-8") # 这段字节是有上面的字符串转换的
print(st) b'\xe7\xbc\x96\xe7\xa0\x81'
b'\xb1\xe0\xc2\xeb'
编码
二
# callable()#检查函数是否能被调用,返回True、False
def f1():
pass # f1()#能被调用
f2 = 123
# f2()# 这个不能被调用 print(callable(f1)) # 能被调用
print(callable(f2)) # 不能被调用 # 查看对应的ascii码
# ord()把ASCII转换成数字
# chr()则相反,把数字转换成ASCII
r = chr(65)
print(r) # A
n = ord("a")
print(n) #
# compile()#可以将字符串编译为python的代码
# 编译:single,eval,exec
s = "print(123)"
r = compile(s, "<string>", "exec") # 将字符串编译成python代码
print(r) # 执行
# exec()# 执行python代码,接收:代码或者字符串 ,只执行,没有返回值
exec(r) # 执行
# eval()#执行表达式,并且获取结果(有返回值)
s = "8*8"
ret = eval(s)
print(ret)
compile()
# dir()#快速的查看一个对象为你提供了哪些功能
print(dir(list))
# help()#查看帮助信息
# help(list) # 共:97条数据,每页显示10条,需要多少页
r = divmod(100, 10)
print(r)
n1, n2 = divmod(100, 10) # 同时赋给两个变量
print(n1, n2) # 对象是类的实例
s = [11, 22, 33]
# 用于判断,对象是否是某个类的实例
r = isinstance(s, list) # 前面是对象,后面是类
print(r)
五
# filter(函数,可迭代的对象)#返回True或False,用于过滤
def f2(a):
if a > 22:
return True li = [11, 22, 33, 44, 55]
# filter内部,循环第二个参数 # result = []
# for item in 第二个参数:
# r = 第一个参数(item)
# if r :
# result(item)
# return result
# filter,循环循环第二个参数,让每一个循环元素执行 函数,如果函数的返回值是True,表示元素合法
ret = filter(f2, li)
print(list(ret)) # lambda版本的filter
li = [11, 22, 33, 44, 55]
ret = filter(lambda a: a > 33, li)#直接在放函数的位置进行筛选
print(list(ret))
filter()
open函数:
# 1、打开文件
# f = open("db", "r") # 只读
# f = open("db", "w") # 只写,写之前会把文件清空
# f = open("db", "x") # 文件存在,报错;不存在,创建并写内容
# f = open("db", "a") # 追加
#
# f = open("db", "rb") # 以字节类型读,只要加上b,都是二进制,二进制表现在代码里面就是字节类型
# date = f.read()
# print(date, type(date))
#
# f = open("db", "ab")
# f.write(bytes("test", encoding="utf-8")) # ab以字节方式写入文件,记得加上bytes以utf-8转换
# f.close() # r+ 用的最多
f = open("db", "r+", encoding="utf-8")
# 如果打开模式无b,则read,按照字符读取
date = f.read(12)
print(date)
print(f.tell()) # tell获取当前指针的位置(永远是字节)
f.seek(1) # r+既可读,又可写,如果这里面加入一个seek()方法,调整当前指针的位置(字节)
f.write("") # 写的时候,当前指针位置开始向后覆盖
f.close() # 2、操作文件
# read() #无参数,读全部;有参数,
# b,按字节
# 无b,按字符
# tell() 获取当前指针位置(字节)
# seek() 指针跳转到指定位置(字节)
# write() 写数据,有b:写字节;无b:写字符;
# close() 关闭文件,如果打卡了必须调用此方法
# fileno() 文件描述符
# flush() 强制刷新
# readable() 判断是否可读,返回True或False
# readline() 仅读取一行
# truncate() 截断,指针位后的清空
# for循环文件对象 f = open(xxx)
# for line in f:
# print(line) # 通过源码查看功能
# 2、关闭文件
# f.close() with open("xb") as f: # with打开文件操作完成之后,会自动关闭文件
pass with open("db1") as f1, open("db2") as f2: # 可以同时打开多个文件
pass # 在代码块里面两个文件都打开,代码块执行完毕之后,两个文件都关闭
open
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。 打开文件的模式有: r ,只读模式【默认】
w,只写模式【不可读;不存在则创建;存在则清空内容;】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; 不存在则创建;存在则只追加内容;】 "+" 表示可以同时读写某个文件 r+, 读写【可读,可写】
w+,写读【可读,可写】
x+ ,写读【可读,可写】
a+, 写读【可读,可写】 "b"表示以字节的方式操作 rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
open
python的学习之路day3的更多相关文章
- Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!
Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!找到你自己感兴趣的点进行切入,并找到兴趣点进行自我驱动是最好的学习方式! 推荐两本书,一本作为 ...
- python学习之路-day3
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数 ==================================== 一.集合操作 集合是一个无序的,不重复的数据组合,它的主要 ...
- ql的python学习之路-day3
字典操作 特性: 1.无序的 2.key是唯一的 , ,,], ,,], ,,], }, ,,], 'bbb' : ['a', 'b', 'c'], }}
- python 爬虫学习之路
2016-6-18 --今天实现了第一个用urllib2实现的爬虫程序. --过程中发现 req = urllib2.Request(url,headers = headers) 总是报错: 主要原因 ...
- python的学习之路day7-socket网络编程
python基础部分学习完了,时间也已经过了两个月左右,感觉没学到什么,可能是我学习之后忘记的太多了. 由于没钱买书,要是去培训就更没钱了,所以在网上找了一本书,感觉还不错,讲的比较好,比较详细. P ...
- python的学习之路day2
1.什么是常量: 常量在程序中是不变的量 但是在python中所有的变量都可以改 注意:为了防止区分错误,所以python中常量使用大写命名 例如: MYSQL_CONNECTION = '192.1 ...
- Python小白学习之路(二十)—【打开文件的模式二】【文件的其他操作】
打开文件的模式(二) 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码.图片文件的jgp格 ...
- Python小白学习之路(十五)—【map()函数】【filter()函数】【reduce()函数】
一.map()函数 map()是 Python 内置的高阶函数 有两个参数,第一个是接收一个函数 f(匿名函数或者自定义函数都OK啦):第二个参数是一个 可迭代对象 功能是通过把函数 f 依次作用在 ...
- Python小白学习之路(十)—【函数】【函数返回值】【函数参数】
写在前面: 昨天早睡之后,感觉今天已经恢复了百分之八十的样子 又是活力满满的小伙郭 今日份鸡汤: 我始终相信,在这个世界上,一定有另一个自己,在做着我不敢做的事,在过着我想过的生活.-------宫崎 ...
随机推荐
- 【杂谈】对CopyOnWriteArrayList的认识
前言 之前看<Java并发编程>这本书的时候,有看到这个,只记得"读多写少"."写入时复制".书中没有过多讲述,只是一笔带过(不过现在回头看,发现讲 ...
- k8s之安装docker-ce17.06
1.下载rpm包 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ https://download.docker. ...
- Code First, Database First, Same Time区别
Code First, Database First, Same Time是我理解的asp.net mvc中用到的三种model与数据库对应的方式,肯定是不全面的,理解也有些狭隘,今后随着自己的理解加 ...
- Spring读取配置文件 @Value
最近在学习Spring如何读取配置文件,记录下方便自己也方便别人: 大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程 ...
- 性能提速:debounce(防抖)、throttle(节流/限频)
debounce与throttle是用户交互处理中常用到的性能提速方案,debounce用来实现防抖动,throttle用来实现节流(限频).那么这两个方法到底是什么(what)?为何要用(why-解 ...
- IIS 共享目录读写报错 Access to the path:“\\192.168.0.1\1.txt”is denied解决方案
这个是IIS权限的问题,主要修改了以下地方,如果两台电脑有相同的用户名和密码可以跳过第一步 1.找到共享目录的文件夹,属性=>共享,给电脑创建一个新用户,共享文件下添加新用户的读写权限,然后对应 ...
- NodeJS+Express开发web,为什么中文显示为乱码
把你的文件另存为下,格式为utf-8的试下就行!
- 将ABP的数据库从SQLSERVER迁移到MySql
摘要:之前跟着网上的一些教程,学习了一点ABP的知识.最近想说把默认的SQLSERVER数据迁移到mysql吧 首先网上搜一波 安装MySql.Data.Entity 然后你需要安装 MySql.Da ...
- Asp.net core WebApi 使用Swagger生成帮助页实例
最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...
- java数组创建
java数组创建:int[] number = new int[10]; int[]:表明这是一个数组 new int[10]:给前面的数组类型的number变量分配10个int类型的空间大小