① python 路径被转义问题
python os 路径被转义的问题,以前常碰到字符串前面加r的情况,不加r有时候有问题有时候没有,也就没深究,这次就碰到一个问题搞了半天发现就是这里路径被转义了。
文件路径中的单双正反斜杠/ \ // \的意义
在python中反斜杠 \ 的功能是转义,例如:\n表示换行,\t 表示水平制表符,也就是tab键。在windows中 反斜杠 \ 也用来表示路径分隔符。
例:
这里\n表示换行,所以输出到K:\imageData就换行了,\4表示输出两个空格,\0 表示八进制编码的ASCII,\0后面的两位数就是8进制数表示的ASCII值,\0后面的8进制数44表示为十进制是4*8+4=36,在ASCII表中正好对应$符号。
如果是在os.path.join()中生成的路径,没法显示的用手改,可以配合split() 和 str.join()方法解决
split("\")把所有有 \ 的地方断开,返回一个列表
rsplit("\",1)把最后出现"\"的地方断开返回一个列表
rsplit()取负数时退化为split()方法
② Python反斜杠小问题
原因很简单。runoob只输出runoob的原因是run[o]ob中的o并不是一个语法类型。
其次,ru oob中ru[ ]oob的 有一个换行的意思,所以结果是:
1-[ru
2-oob]
如果不想让他换行,可以使用/。
类似于 (换行)的还有 (字符串制中)和 (这个还没了解可以试验一下)
都可以试试看看效果。
③ Python反斜杠\\
就是一个反斜杠的意思,比如\n是换行,但是如果我就是需要\n这两个字符怎么办,就是\\n
④ Python3中反斜杠\n
由r开头引起的字符串就是声明了后面引号里的东西是原始字符串,在里面放任何字符都表示该字符的原始含义。
这种方法在做网站设置和网站目录结构的时候非常有用,使用了原始字符串就不需要转义了。
如果把单引号前边的r去掉的话就可以换行了
⑤ Python函数的参数类型
Python函数的参数类型主要包括必选参数、可选参数、可变参数、位置参数和关键字参数,本文介绍一下他们的定义以及可变数据类型参数传递需要注意的地方。
必选参数(Required arguments)是必须输入的参数,比如下面的代码,必须输入2个参数,否则就会报错:
其实上面例子中的参数 num1和num2也属于关键字参数,比如可以通过如下方式调用:
执行结果:
可选参数(Optional arguments)可以不用传入函数,有一个默认值,如果没有传入会使用默认值,不会报错。
位置参数(positional arguments)根据其在函数定义中的位置调用,下面是pow()函数的帮助信息:
x,y,z三个参数的的顺序是固定的,并且不能使用关键字:
输出:
在上面的pow()函数帮助信息中可以看到位置参数后面加了一个反斜杠 / ,这是python内置函数的语法定义,Python开发人员不能在python3.8版本之前的代码中使用此语法。但python3.0到3.7版本可以使用如下方式定义位置参数:
星号前面的参数为位置参数或者关键字参数,星号后面是强制关键字参数,具体介绍见强制关键字参数。
python3.8版本引入了强制位置参数(Positional-Only Parameters),也就是我们可以使用反斜杠 / 语法来定义位置参数了,可以写成如下形式:
来看下面的例子:
python3.8运行:
不能使用关键字参数形式赋值了。
可变参数 (varargs argument) 就是传入的参数个数是可变的,可以是0-n个,使用星号( * )将输入参数自动组装为一个元组(tuple):
执行结果:
关键字参数(keyword argument)允许将任意个含参数名的参数导入到python函数中,使用双星号( ** ),在函数内部自动组装为一个字典。
执行结果:
上面介绍的参数可以混合使用:
结果:
注意:由于传入的参数个数不定,所以当与普通参数一同使用时,必须把带星号的参数放在最后。
强制关键字参数(Keyword-Only Arguments)是python3引入的特性,可参考:https://www.python.org/dev/peps/pep-3102/。 使用一个星号隔开:
在位置参数一节介绍过星号前面的参数可以是位置参数和关键字参数。星号后面的参数都是强制关键字参数,必须以指定参数名的方式传参,如果强制关键字参数没有设置默认参数,调用函数时必须传参。
执行结果:
也可以在可变参数后面命名关键字参数,这样就不需要星号分隔符了:
执行结果:
在Python对象及内存管理机制中介绍了python中的参数传递属于对象的 引用传递 (pass by object reference),在编写函数的时候需要特别注意。
先来看个例子:
执行结果:
l1 和 l2指向相同的地址,由于列表可变,l1改变时,l2也跟着变了。
接着看下面的例子:
结果:
l1没有变化!为什么不是[1, 2, 3, 4]呢?
l = l + [4]表示创建一个“末尾加入元素 4“的新列表,并让 l 指向这个新的对象,l1没有进行任何操作,因此 l1 的值不变。如果要改变l1的值,需要加一个返回值:
结果:
下面的代码执行结果又是什么呢?
执行结果:
和第一个例子一样,l1 和 l2指向相同的地址,所以会一起改变。这个问题怎么解决呢?
可以使用下面的方式:
也可以使用浅拷贝或者深度拷贝,具体使用方法可参考Python对象及内存管理机制。这个问题在Python编程时需要特别注意。
本文主要介绍了python函数的几种参数类型:必选参数、可选参数、可变参数、位置参数、强制位置参数、关键字参数、强制关键字参数,注意他们不是完全独立的,比如必选参数、可选参数也可以是关键字参数,位置参数可以是必选参数或者可选参数。
另外,python中的参数传递属于对象的 引用传递 ,在对可变数据类型进行参数传递时需要特别注意,如有必要,使用python的拷贝方法。
参考文档:
--THE END--
⑥ python基础问题,关于反斜杠\
如果打印:
print("\ \ \ \ ")
结果也是 \ \ \ \
因为在 \ 后紧跟一个空格导致不会触发 反斜杠的转义作用,也没有必要被转义, 所以"\\(空格)" 和"\(空格)"打印结果是一样的。
如果 print("\") 在 \ 后面没有跟空格, 第二个双引号 ” 就被强制转义了,导致打印错误。
1,只要在 \ 后面加空格,避免被当成转义符; 2,或者前面加个 \ 将其转义。
print("\\")
print("\ ") 都是打印出 \
现在回过头看
print("\\ \\ \\ \\")
print("\ \\ \\ \\") 的区别就在第一个反斜杠是否被转义,
其实 第一个 反斜杠后只要有加空格,是否要将其转义都是可以的。
⑦ python中将反斜杠'\'变为正斜杠'/'
Windows文件的路径是按反斜杠 " \ " 分开的
例如:D:\protect\nodejs\test\testmkdir\assets\res\monster
linux文件路径是使用正斜杠 " / " 分开。
例如:/protect/nodejs/test/testmkdir/assets/res/monster/
反斜杠 " \ " 的路径,linux中无法识别
需要把反斜杠 " \ " ,转为正斜杠" / "
python 中字符串的replace方法进行替换,如下所示:
#遍历目录文件
for filepath,dirs,filelistin os.walk(upload_path):
for filenamein filelist:
curFile = os.path.join(filepath,filename)#路径的拼接
curFile = curFile.replace('\\','/')#将路径中的反斜杠变为" / "