Python笔记_14_滑动序列_面试题_Linux相关_目录_命令_权限

本文深入探讨Python编程中的高级技巧,包括列表解析、函数式编程、闭包特性及生成器函数的运用。同时,提供了Linux系统常用命令的详细指南,涵盖文件管理、权限设置及系统维护等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

滑动序列

#复习
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
'''

面试题

  1. 函数默认形参为列表
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]

函数如果定义一个默认形参,那么这个值会在内存当中提前保留一份
在函数调用时:

  • 如果用户定义了实参,那么使用用户自己的实际值
  • 如果用户没有给与实际参数,那么使用默认形参值
  1. 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

  1. 打印多少?
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库文件/lib6464位库文件
/lost+found系统异常产生错误时,丢失文件放在这/media媒体文件
/mnt挂载目录/opt安装软件时的默认目录
/proc内存中相关数据文件/rootroot用户登录的家目录
/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 + 挂载的目录)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值