滑动序列
#复习
lst1 = [1,5]
lst2 = [2,6]
lst3 = [3,7]
lst4 = [4,8]
it = zip(lst1,lst2,lst3,lst4)
print(list(it))
[(1, 2), (3, 4), (5, 6), (7, 8)]
n = 2
lst1 = [1 , 3 , 5 , 7 ,9] listvar[0::2] # 0 2 4 6 8
lst2 = [2 , 4 , 6 , 8 ] listvar[1::2]
it = zip(lst1,lst2)
print(list(it))
listvar = [[1,2,3],[4,5,6],[7,8,9]]
n=3
lst1 = [1,4,7] listvar[0::3] # 0 3 6
lst2 = [2,5,8] listvar[1::3]
lst3 = [3,6,9] listvar[2::3]
it = zip(lst1,lst2,lst3)
listvar = [[1,2,3,4],[5,6,7,8]]
lst1 = [1,5,9] listvar[0::4] # 0 4 8
lst2 = [2,6] listvar[1::4] 2 6
lst3 = [3,7] listvar[2::4]
lst4 = [4,8] listvar[3::4]
it = zip(lst1,lst2,lst3,lst4)
range(4)
n = 2
lst1 = [1 , 3 , 5 , 7 ,9] #listvar[0::2] # 0 2 4 6 8
lst2 = [2 , 4 , 6 , 8 ] #listvar[1::2]
it = zip(lst1,lst2)
print(list(it))
zip(listvar[0::2],listvar[1::2])
listvar = [1,2,3,4,5,6,7,8,9]
n = 2
res = [listvar[i::n] for i in range(n)]
print(res)
n = 3
res = [listvar[i::n] for i in range(n)]
print(res)
n = 4
res = [listvar[i::n] for i in range(n)]
print(res)
# 把大列表当中的每一个小列表一个一个的拿出来当成zip的参数进行赋值
# 过程化版本
n = 5
it = zip(*[listvar[i::n] for i in range(n)])
print(list(it))
# 普通版本
def func(listvar,n):
return zip(*[listvar[i::n] for i in range(n)])
res = func(listvar,2)
print(list(res))
# 优化版本
func = lambda listvar,n : zip( *[ listvar[i::n] for i in range(n) ] )
it = func(listvar,3)
print(list(it))
'''
# 复习 * 和 ** 的魔术用法(是函数的调用处使用)
def func(a,b,c):
print(a,b,c)
# 把列表当中的每一个元素,一个一个拿出来作为func的参数进行赋值;
listvar = [1,2,3]
func(*listvar)
def func(a=1,b=2,c=3):
print(a,b,c)
dic = {'a':10,"b":12,"c":13}
func(**dic) # a=10,b=12,c=13
'''
面试题
- 函数默认形参为列表
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
print(list1) #[10]
list2 = extendList(123, [])
print(list2) #[123]
list3 = extendList('a')
print(list3) #[10,a]
函数如果定义一个默认形参,那么这个值会在内存当中提前保留一份
在函数调用时:
- 如果用户定义了实参,那么使用用户自己的实际值
- 如果用户没有给与实际参数,那么使用默认形参值
- res多少?
def func():
return [lambda x : i*x for i in range(4)]
res = [m(2) for m in func()]
print(res)
代码解析:
'''
在ceshi函数当中 跑循环4遍 ,循环定义4个函数
注意的是,遍历的时候仅仅是定义,只有在调用的时,才会运行函数体,
所以定义时,i变量不会直接走入函数体内参与运算
最后通过lst返回,lst当中包含4个函数,因为内函数func使用了外函数ceshi的变量i,
所以变量i延长了它的生命周期,这是闭包的特点
返回出来之后,通过列表推导式 , 循环调用了4次函数,这个时候 2 与先前的i 参与运算,
因为i值已经全部循环结束,最后的i = 3,所以每个函数的运算结果 都是 2*i => 2 * 3 =>6
因为循环4次,所以列表里 产生了4 个 6;
'''
def ceshi():
lst = []
for i in range(4):
def func(x):
return i*x
lst.append(func)
return lst
lst = ceshi()
print(lst)
res = len(lst) #4
'''
#
[
<function ceshi.<locals>.func at 0x000001805BB50EA0>,
<function ceshi.<locals>.func at 0x000001805BB50F28>,
<function ceshi.<locals>.func at 0x000001805BB50E18>,
<function ceshi.<locals>.func at 0x000001805BB85048>
]
lst = [函数1,函数2,函数3,函数4]
'''
for m in lst:
'''
def func(x):
return i*x
'''
res = m(2)
print(res)
'''
函数的定义处和函数的调用处要分开
只有在函数调用的时候,才会执行函数体,
定义的时候只是单纯的定义包括参数,而没有去调用里面的内容
'''
for i in range(4):
pass
print(i) # i = 3
- 打印多少?
def add(a,b): #普通求和函数
return a + b
def test(): #生成器函数
for i in range(4):
yield i
# 初始化生成器函数 返回生成器
g=test()
for n in [2,10]:
g=(add(n,i) for i in g)
print(list(g))
代码解析
"""
定义一个生成器可以使用两种方式 要么使用生成器表达式,要么使用生成器函数,
注意只有调用时,才能执行生成器里面的内容 , next,for,list都是在调用生成器
而g=(add(n,i) for i in g) 写法是在定义生成器
next(g) for .. in g list(g) 是在调用
在循环时候,只是定义了生成器2次,没有在调用,下次再拿取n的时,n已经等于10
第一次调用生成器
先计算g=(add(n,i) for i in (0,1,2,3)) 得到结果得范围 g = (10,11,12,13)
第二次调用生成器
先计算g=(add(n,i) for i in (10,11,12,13)) 得到结果得范围 g = (20,21,22,23)
list进行强转,得到列表[20,21,22,23]
"""
'''
g=(add(n,i) for i in g) # i的范围 0 1 2 3
add(n,0) => add(10,0) => 10
add(n,1) => add(10,1) => 11
add(n,2) => add(10,2) => 12
add(n,3) => add(10,3) => 13
g = (10,11,12,13)
g=(add(n,i) for i in g)
add(n,10) => add(10,10) => 20
add(n,11) => add(10,11) => 21
add(n,12) => add(10,12) => 22
add(n,13) => add(10,13) => 23
[20,21,22,23]
'''
for n in [2,10]:
pass
print(n)
第二种解析
'''
g = test()
n = 2
g = (add(n, i) for i in g) 只记录代码 没有运行取值 g = (add(n, i) for i in test())
n = 10
g = (add(n, i) for i in g) / g = (add(n, i) for i in (add(n, i) for i in test())) 此时 n=10
'''
print(list(g)) #才开始取值
#g = (add(10, i) for i in (add(10, i) for i in test()))
#g = (add(10, i) for i in (add(10, i) for i in (0,1,2,3)))
#g = (add(10, i) for i in (10,11,12,13)))
#g = (20,21,22,23)
#生成器记录的是代码
linux相关
目录含义
目录 | 含义 | 目录 | 含义 |
---|---|---|---|
/bin | 存放普通用户的命令文件 | /boot | 存放系统启动文件 |
/cdrom | 存放读取光盘的相关文件 | /dev | 设备文件 |
/etc | 配置文件 | /home | 家目录 |
/lib | 库文件 | /lib64 | 64位库文件 |
/lost+found | 系统异常产生错误时,丢失文件放在这 | /media | 媒体文件 |
/mnt | 挂载目录 | /opt | 安装软件时的默认目录 |
/proc | 内存中相关数据文件 | /root | root用户登录的家目录 |
/run | 系统运行时候 用到的文件 | /sbin | 超级管理员运行的文件 |
/srv | 服务启动之后需要访问的数据目录, | /sys | 系统文件 |
/tmp | 临时文件 | /usr | 应用程序存放目录 |
/var | 放置系统执行过程中经常变化的文件,如随时更改的日志文件 |
linux 系统当中 一切皆文件
(常用的比如:普通文件,目录文件,链接文件,设备文件等)
相关命令
- 相对路径:
. 相对于当前路径
.. 相对于上一级路径 - 绝对路径:
以/开头的就是绝对路径
命令 | 含义 | 命令 | 含义 |
---|---|---|---|
cd .. | 回到上一级 | cd /home/wangwen | 切换目录 /home/wangwen |
cd ~ | 切换到家目录 | cd - | 回到上一个你操作的那一个目录 |
pwd | 看一眼 你当前所在的目录是哪里 | ls | 看一眼 你这个文件夹里面有什么 |
.bash_history | 但凡是点开头的文件 都是隐藏文件 | ||
-a all | 所有文件(包括隐藏文件) | -l list | 以列表的形式呈现 |
-h | 可以让文件大小带上单位 | ll | 相当于 ls -al |
man | 是帮助命令 比如:man ls 或 man cp | ||
mkdir | 文件夹名称 | touch | 创建文件 |
ln -s | 创建连接 (ln -s 指定你想要创建的连接 放到哪个目录下面) | ln -s | 需要使用绝对路径的方式来创建 |
ifconfig | 查看linux下面的ip | ||
mv /路径/文件夹或文件 (新名称) | 功能:既可以剪切 也可以改名(move) | cp | 路径 路径(从哪里 ~ 哪里去) |
cp | 默认 只能够复制文件 | cp -r | 可以复制文件夹 |
cp -a | 可以复制权限和所有属性 | rm -rf | 指定文件夹或者文件名称 用于删除文件或者目录 |
nano | 内置自带的编辑器 编辑文件用的 | cat | 查看文件内容 |
more | 对于内容比较多的情况用more 支持分页 空格下一页 | head 加上-2 | 是查看前几条 |
tail 加上-2 | 是查看后几条 |
符号链接(symbolic link),又称软链接
硬链接(hard link)
权限结构
指定类型(dl-) 权限位1(rwx) 权限位2(rwx) 权限位3(rwx)
r=>read w=>write x=>可执行
d表示文件夹 directory的缩写 l表示链接 link的缩写 -表示文件
d rwx rwx r-x
- --- --- ---
文件类型 所属主 所属组 其他
d rwx rwx rwx
-
位数1,2,3 代表当前文件或者文件夹的所有者的权限设定:(所有者的权限 u,user)
1: r 或者 - r表示可以读取 - 表示不可以读取
2: w 或者 - w表示可以写入 - 表示不可以写入
3: x 或者 - x表示可以执行 - 表示不可以执行 -
位数4,5,6 代表当前文件或者文件夹的所属组的权限设定:(所属组的权限 g ,group)
1: r 或者 - r表示可以读取 - 表示不可以读取
2: w 或者 - w表示可以写入 - 表示不可以写入
3: x 或者 - x表示可以执行 - 表示不可以执行 -
位数7,8,9 代表其他用户对当前文件或者文件夹的的权限设定:(其他人的权限 o,other)
1: r 或者 - r表示可以读取 - 表示不可以读取
2: w 或者 - w表示可以写入 - 表示不可以写入
3: x 或者 - x表示可以执行 - 表示不可以执行
更改权限
r => 4
w => 2
x => 1
r w x => 7
r w - => 6
r - x => 5
r- - => 4
-w x => 3
- w - => 2
- - x => 1
- - - => 0
=> rwx的任意组合共 8 种 情况
- 755 (根目录下默认的文件夹权限)
rwx r-x r-x - 644 (根目录下默认的文件权限)
rw- r-- r– - 777 (所有权限)
rwx rwx rwx
关于权限更改 :
chmod 755 1.txt
递归更改这个文件夹里面的所有文件权限
chmod -R 777 ceshi100
(chmod -R 777 文件夹)
u代表所有者 加一个r权限 (user)
g代表所属组 减一个w权限 (group)
o代表其他 加一个执行权限 (other)
chmod u+r,g-w,o+x 1.txt
其他写法:
chmod u=rwx 1.txt
- 对于目录来讲
r 是否呈现里面的文件
w 是否可以在里面创建文件或文件夹
x cd 切不进来 不能访问这个目录 - 对于文件来讲
r 可以看到文件内容
w 可以更改删除文件及内容
x 是否可以执行这个文件 ./abc.sh (shell)
查找命令
-
find 搜索命令 #找文件
按照文件名查找
find 查找位置 -name 文件名
find / -name index.php
按照文件名查找
-iname 按照文件名查找,不区分大小写 -
grep “字符串” 文件名 #找这个文件里面符合条件的内容(找内容)
-v 反向选择
-i 忽略大小写grep -i "root" /etc/passwd
grep -v "root" /etc/passwd
*(ls -l 路径 /ss/xx/文件 ) 单独查看一个文件或文件夹的
/etc
passwd 账户文件
shadow 账户的密码文件(加密的)
root 是最高权限账户
关于挂载操作
- 查看当前系统有哪些挂载设备
sudo fdisk -l
- 挂载
sudo mount 找到的设备路径 /mnt/cdrom
- 取消挂载
sudo umount /mnt/cdrom (umount + 挂载的目录)