• 关于 python里的.. 的搜索结果

问题

【python学习全家桶】263道python热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:21 7217 浏览量 回答数 2

问题

基础语言百问-Python

薯条酱 2019-12-01 20:12:27 56807 浏览量 回答数 30

问题

2018python技术问答集锦,希望能给喜欢python的同学一些帮助

技术小能手 2019-12-01 19:31:10 2040 浏览量 回答数 2

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

回答

1、python脚本中经常第一句出现#!/usr/bin/env python或#!/usr/bin/python。这句话的意义下面解释: 脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 !/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器; !/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。 !/usr/bin/python相当于写死了python路径; !/usr/bin/env python会去环境设置寻找python目录,推荐这种写法 如果你用 python xxoo.py 来运行,那么写不写都没关系,如果要用 ./xxoo.py 那么就必须加这行, 用来为脚本语言指定解释器. 通常认为用 #!/usr/bin/env python 要比 #!/usr/bin/python 更好,因为 python 解释器有时并不安装在默认路径,例如在 virtualenv 中。 当你把py文件直接赋予执行权限去执行 ./yourfile.py 的时候,给文件指定一个解释器。 而 #!/usr/bin/python 是一般默认的python解释器的路径,所以这种的就是装在默认位置的不会出问题。 但是 #!/usr/bin/envpython 则更加通用一些会去你的PATH 中寻找python 。 python脚本的两种调用方式说明: 1、./run.py.shell直接调用python脚本 2、python run.py 调用python 解释器来调用python脚本 先分别解释: 1、./run.py调用脚本的方式。shell把run.py当成一般的脚本看待,不把它当成python脚本。按这种方式调用脚本,python 脚本的第一行必须有: !/usr/bin/env python3(或#!/usr/bin/env python) 先举例子说明,在说明原因: 未加#!/usr/bin/env python3的情况: a.py: print ('a') 说明:要使用./a.py,必须使用chmod将a.py的属性改成可执行的。 chmod 755 a.py -rwxr-xr-x 1 root root 12 Nov 27 09:43 a.py 如果a.py是不可执行的,那么./a.py就会报如下错误。 -bash: ./a.py: Permissiondenied 在将a.py改为可执行后,如果使用./a.py,还是会报错。 ./a.py: line 1: syntaxerror near unexpected token `'a'' ./a.py: line 1: `print('a')' 但是,因为我系统中装了python2和python3. 所以,使用#!/usr/bin/env python3提示shell使用python3来调用脚本. a.py内容如下:--------------------------------------------------------------------------------------------------- !/usr/bin/env python3 print ('a') 执行结果为:a python3 print函数必须要加上(). 所以,如果上述的print('a')变为print 'a',显然是会报错的。 root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#./a.py File "./a.py", line 2 print 'a' ^ SyntaxError: invalidsyntax 以上就说明了,使用./run.py调用python脚本的方式,取决于你在python脚本中第一句,并且使用./run.py必须在脚本文件中写上#!/usr/bin/env python3(或类似的命令),不然都执行不了。 1、先说明一下,我的系统中是预装了python2,然后我装了python3,并且系统默认的python是python2。我装了python3并没有改变系统默认的python解释器,也不建议把系统默认的python解释器改变了,因为像scikit-learn等库很多还是基于python2.7的,你把系统默认的python改成python3会导致很多库出问题。 2、看一下/usr/bin:就知道在ubuntu中,各种软件的安装情况 lrwxrwxrwx 1 root root 9 Jun 19 2013 python -> python2.7 lrwxrwxrwx 1 root root 9 Jun 19 2013 python2 -> python2.7 -rwxr-xr-x 1 root root 2985296 Dec 19 2014 python2.7 lrwxrwxrwx 1 root root 30 Nov 26 10:08 python3 ->/opt/python3.3.2/bin/python3.3 说明: 1、python-> python2.7:系统默认的python是python2.7 2、python2-> python2.7:python2执行的是python2.7 3、python3-> /opt/python3.3.2/bin/python3.3:python3执行的是/opt/python3.3.2/bin/python3.3 现在做个试验:说明使用./run.py的方式,随着第一句#!/usr/bin/envpython3的不同,shell会调用不同的python解释器。 1、 [python] view plain copy !/usr/bin/env python3 import subprocess, sys, os, time NR_THREAD = 1 start = time.time() cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True) cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True) print ("end pre-a.py") 中断程序查看shell调用哪个python解释器: File"./run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 522, incall Traceback (most recentcall last): File "converters/pre-a.py", line36, in key = field + '-' + row[field] KeyboardInterrupt return p.wait(timeout=timeout) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1528,in wait (pid, sts) = self._try_wait(0) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1485,in _try_wait (pid, sts) = _eintr_retry_call(os.waitpid,self.pid, wait_flags) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 476, in_eintr_retry_call return func(*args) KeyboardInterrupt 很明显,使用#!/usr/bin/env python3,那么shell就调用了python3的解释器。 2、 [python] view plain copy !/usr/bin/env python2 import subprocess, sys, os, time NR_THREAD = 1 start = time.time() cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True) cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True) print ("end pre-a.py") 中断程序查看shell调用哪个python解释器: Traceback (most recentcall last): File "./run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/usr/lib/python2.7/subprocess.py",line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py",line 1291, in wait pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0) File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call return func(*args) KeyboardInterrupt 很明显,使用#!/usr/bin/env python2,那么shell就调用了python2的解释器。 3、 [python] view plain copy !/usr/bin/env python import subprocess, sys, os, time NR_THREAD = 1 start = time.time() cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True) cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True) print ("endpre-a.py") 中断程序查看shell调用哪个python解释器: File"./run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/usr/lib/python2.7/subprocess.py",line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py",line 1291, in wait pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0) File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call return func(*args) KeyboardInterrupt root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last): File "converters/pre-a.py", line19, in for row incsv.DictReader(open(args['csv_path'])): File "/opt/python3.3.2/lib/python3.3/csv.py", line 118, in__next__ d = dict(zip(self.fieldnames, row)) KeyboardInterrupt 很明显,使用#!/usr/bin/env python,那么shell就调用了系统默认的python解释器,也就是python2。python -> python2.7。那么,为什么还会出现python3.3.2。那是因为程序中,subprocess.call(cmd, shell=True),开了一个子进程,使用了shell来调用pre-a.py,pre-a.py肯定是使用#!/usr/bin/envpython3 .pre-a.py脚本的内容如下: [python] view plain copy !/usr/bin/env python3 import argparse, csv, sys from common import * if len(sys.argv) == 1: sys.argv.append('-h') parser = argparse.ArgumentParser() parser.add_argument('csv_path', type=str) parser.add_argument('dense_path', type=str) parser.add_argument('sparse_path', type=str) args = vars(parser.parse_args()) 2、如果使用python run.py 的方式来调用脚本,那么脚本文件中的第一句#!/usr/bin/envpython3就会被自动略掉,不会起到任何的作用。 python2 run.py代表使用默认的python2解释器来调用脚本。 python3 run.py 代表使用默认的python3解释器来调用脚本。 python run.py 代表使用默认的python解释器来调用脚本。 python run_test.py: ^CTraceback (mostrecent call last): File "run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/usr/lib/python2.7/subprocess.py",line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py",line 1291, in wait pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0) File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call return func(*args) KeyboardInterrupt root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last): File "converters/pre-a.py", line22, in val = row['I{0}'.format(j)] KeyboardInterrupt 很明显,python run_test.py,使用默认的python解释器(python2)来调用脚本。 python3 run_test.py: ^CTraceback (mostrecent call last): File "run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 522, in call return p.wait(timeout=timeout) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1528, in wait (pid, sts) = self._try_wait(0) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1485, in _try_wait (pid, sts) = _eintr_retry_call(os.waitpid,self.pid, wait_flags) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 476, in _eintr_retry_call return func(*args) KeyboardInterrupt root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last): File "converters/pre-a.py", line19, in for row incsv.DictReader(open(args['csv_path'])): File "/opt/python3.3.2/lib/python3.3/csv.py", line 118, in next d = dict(zip(self.fieldnames, row)) KeyboardInterrupt 很明显,python3 run_test.py,使用python3解释器来调用脚本。来源:网络

51干警网 2019-12-02 01:10:47 0 浏览量 回答数 0

回答

断断续续地, 花了应该有个把月读完Fluent Python. 当然, 并非真正读完. Chapter 16 coroutine, Chapter 17, 18 Concurrency with futures/asyncio 这三章没来得及读. 原因是读到这几章时国庆假期已经快结束了. 相比于这三章, 后面的章节更有吸引力, 所以跳过. 跳过就跳过吧. 读书的过程中作了不少笔记. 一开始写笔记没怎么考虑可读性, 因为我想着这是给自己看的. 可后来感觉不对. 一是可读性差了, 会影响自己再读的欲望. 二是, 更重要的是, 在写笔记的过程中若注重可读性, 自己会思考地更深入浅出, 全面条理, 也就是说思考加工的更多更深了, 既可加深即时的理解, 也有助于长期的记忆. 既然如此, 何乐而不为. 好了, 闲话不多说了, 回到Fluent Python上来. 总体评价是通俗易懂,系统全面, 深入浅出. 我读的是英文原版而非翻译版, 原因不是因为个人觉得自己英语有多好, 而是翻译版实在是读得不顺. 一开始的三章读的就是翻译版, 觉得翻译得不错. 但读到第四章: 文本和字节序列时懵了. 因为遇到了以下两个名词: 码位, 字节表述. 每个字都认识, 可组合成词后, 实在是无法理解它们的涵意. 好吧, 说不定这是什么要介绍的新概念. 可读了好几个section都没get到它的意思. 顿时不淡定了. 于是又上网搜到本书的英文原版. 原来码位是code point, the identity of a character, 字节表述是byte representation. 好吧. 真的不怪译者. 有些概念在中文里没有原生词汇, 只能自己发挥. 之后的内容就都是读的英文原版的了. 从语言上讲, 写的真心不错. 嗯, 从内容上讲也很好. 对我而言, 本书的广度和深度都是够的, 大大拓宽和加深了我对Python的理解. 接下来是读完这本书后最深的几点感想. 在使用Python之前, 本人用得最多的是Java, 所以在学习Python的过程中会经常性地把Python与Java的某些语言特性对比一番. 接下的描述依旧会如此. Python中的协议. 协议就是接口. Java里实现一个协议就要implements/extends一个接口/抽象类. implements/extends一个接口/抽象类就要implements它的所有方法. 但是有些方法确实用不着, 于是空着吧. 既占地又难看. 而Python里实现一个协议只需要实现对应的方法, 并且还不需要全部实现, 只要保证将用得着的给实现好就能用. 方便的很.Python中的函数也是对象, 函数与类之间没有绝对的界限. Python的OOP, 比Java走得更远.Python中的访问控制机制. Python给我的第一印象是: Python没有像Java那样严格的访问控制机制. 访问与否, 是否修改, 大部分情况下全凭约定和自觉. 但Python其实是提供了descriptor协议用于控制属性访问的. 而且, 用descriptor将class的属性暴露成接口, 不需要像Java一样写很多冗长的getter/setter, 更为简洁.safety与security. Python支持对class与instance的各种动态操作(Monkey patching), 也不支持完备的访问控制机制, 可以防止无意间的错误调用, 却不能防止有意的恶意调用. 初看之下, 这一点不如Java. 可是Java提供的控制限制机制就是保证绝对安全吗? Absolutely NOT. 在Java中若要一定要访问private属性, 也是可以做到的. 所以, 无论是Java还是Python, 在设计时都只做到了为safety考虑, 但都不能保证security.Python里, 特定地操作会触发特定的特殊方法的调用. 例如, len–>__len__, []–>__getitem__, for ... in –> __iter__, 等等. 易用性灵活性都非常高.

xuning715 2019-12-02 01:10:31 0 浏览量 回答数 0

问题

【精品锦集】Python热门问答06

问问小秘 2019-12-01 19:54:27 57 浏览量 回答数 1

问题

在 Debian 8 系统里安装 jupyter notebook

dongshan8 2019-12-01 21:45:13 3725 浏览量 回答数 1

问题

在 CentOS 7 通过 Software Collections 源安装 python3.5

dongshan8 2019-12-01 21:30:00 2349 浏览量 回答数 1

问题

python问答学堂-《python进阶大全》中你必须掌握的QA

montos 2020-04-16 21:56:30 34 浏览量 回答数 1

回答

Windows环境:   安装whl包:pip install wheel -> pip install **.whl 下载whl文件MySQL_python-1.2.5-cp27-none-win32.whlMySQL_python-1.2.5-cp27-none-win_amd64.whl执行pip install MySQL_python-1.2.5-cp27-none-win32.whl 如果是安装64位的,需要把这个文件名改为“MySQL_python-1.2.5-cp27-none-any.whl”。  安装tar.gz包:cd到解压后路径,python setup.py install Linux环境:   安装whl同上   安装tar.gz,命令格式:tar -zxvf 压缩文件名.tar.gz解压后,cd文件 ->./configure -> make -> make install 或者 python setup.py install   安装zip包,命令格式:unzip filename.zip 解压后,python setup.py install    卸载安装包:    python setup.py install --record files.txt 记录安装后文件的路径    cat files.txt | xargs rm -rf 删除这些文件 用pip安装一个包,报错误:python pip fatal error in launcher unable to create process using “”   python2 -m pip install XXX   python3 的pip用python3 -m pip install xxx --upgrade pip pip更新软件包直接运行-cmd 控制台操作   查看包 pip list   安装a.whl包 pip install a.whl   升级包 pip install --upgrade a.whl   卸载包 pip uninstall a.whl   查看待更新包 pip list --outdate   升级pip自己 pip install --upgrade pip   升级某个版本的包   pip install SomePackage # latest version   pip install SomePackage==1.0.4 # specific version Python 里面直接运行,更新多个包   import pip   from subprocess import call   for dist in pip.get_installed_distributions():     call("pip install --upgrade " + dist.project_name, shell=True)

寒喵 2019-12-02 01:08:36 0 浏览量 回答数 0

问题

在CentOS6里安装使用python2.7

dongshan8 2019-12-01 21:50:45 772 浏览量 回答数 1

问题

linux怎么修改include出现的问题

a123456678 2019-12-01 20:01:54 764 浏览量 回答数 1

问题

在Debian 8 系统里安装python3

dongshan8 2019-12-01 21:07:01 6696 浏览量 回答数 1

回答

1.下载并安装Sublime text3 点击下载osx版直接安装即可。如果需要其他系统版本请移步这里安装完成,在launcher启动Sublime 屏幕快照 2017-01-06 下午8.32.28.png2.配置Python3的编译环境 找到Python3的安装路径终端中输入命令type -a python3可以看到结果屏幕快照 2017-01-06 下午8.37.07.png 复制路径/Library/Frameworks/Python.framework/Versions/3.5/bin/python3配置Sublime打开Sublime->Tools->build system->new build system如下图可以看到列表里面已经有了Python编译环境,但这是针对Python2.x的版本的,需要我们手动添加3.x版本。 屏幕快照 2017-01-06 下午8.41.06.png 点击new build system 后的窗口如下图: 屏幕快照 2017-01-06 下午8.46.29.png 将其修改为{"cmd": ["之前得到的python3路径","-u","$file"],}然后点击save as保存为Python3.sublime-build此时再次查看build system列表发现Python3已经出现了,至此Sublime的Python3编译环境已经完成。 屏幕快照 2017-01-06 下午8.51.22.png 开始我们的第一个程序hello Python! 新建工作目录桌面新建一个名为python_work的文件夹,用来存放python文件新建文件使用Sublime-->new file 新建一个空文件保存到刚才创建的python_work中,命名为hello_python.py 。(这里命名时加了.py后缀是告诉Sublime说我这个文件是python程序,这样在编写时候会给出关键字的颜色标示,并且 编译时候会使用python编译环境)打印hello pythonprint("hello python!")编写完代码保存,command+B执行编译 屏幕快照 2017-01-06 下午9.03.31.png 作者:Jenson_链接:https://www.jianshu.com/p/db807455b755來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

xuning715 2019-12-02 01:10:43 0 浏览量 回答数 0

问题

java 世界真是太可怕了...........:报错

kun坤 2020-06-06 15:22:02 3 浏览量 回答数 1

回答

python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它的返回值。试一下在 python的解释器里输入os.system(”ls -l”),就可以看到”ls”列出了当前目录下的文件。可以说,通过这个函数,python就拥有了shell的所有能力。呵呵。。不过,通常这条命令不需要用到。因为shell常用的那些命令在python中通常有对应而且同样简洁的写法。 shell中最常用的是ls命令,python对应的写法是:os.listdir(dirname),这个函数返回字符串列表,里面是所有的文件名,不过不包含”.”和”..”。如果要遍历整个目录的话就会比较复杂一点。我们等下再说吧。先在解释器里试一下: os.listdir(”/”) [’tmp’, ‘misc’, ‘opt’, ‘root’, ‘.autorelabel’, ’sbin’, ’srv’, ‘.autofsck’, ‘mnt’, ‘usr’, ‘var’, ‘etc’, ’selinux’, ‘lib’, ‘net’, ‘lost found’, ’sys’, ‘media’, ‘dev’, ‘proc’, ‘boot’, ‘home’, ‘bin’] 就像这样,接下去所有命令都可以在python的解释器里直接运行观看结果。 对应于cp命令的是:shutil.copy(src,dest),这个函数有两个参数,参数src是指源文件的名字,参数dest则是目标文件或者目标目录的名字。 如果dest是一个目录名,就会在那个目录下创建一个相同名字的文件。与shutil.copy函数相类似的是 shutil.copy2(src,dest),不过copy2还会复制最后存取时间和最后更新时间。 不过,shell的cp命令还可以复制目录,python的shutil.copy却不行,第一个参数只能是一个文件。这怎么办?其实,python还有个shutil.copytree(src,dst[,symlinks]) 。参数多了一个symlinks,它是一个布尔值,如果是True的话就创建符号链接。 移动或者重命名文件和目录呢?估计被聪明的朋友猜到了,shutil.move(src,dst),呵呵。。与mv命令类似,如果src和dst在同一个文件系统上,shutil.move只是简单改一下名字,如果src和dst在不同的文件系统上,shutil.move会先把src复制到dst,然后删除src文件。看到现在,大多数朋友应该已经对 python的能力有点眉目了,接下来我就列个表,介绍一下其它的函数: os.chdir(dirname)把当前工作目录切换到dirname下 os.getcwd()返回当前的工作目录路径 os.chroot(dirname)把dirname作为进程的根目录。和*nix下的chroot命令类似 os.chmod(path,mode)更改path的权限位。mode可以是以下值(使用or)的组合: os.S_ISUIDos.S_ISGIDos.S_ENFMTos.S_ISVTXos.S_IREADos.S_IWRITEos.S_IEXECos.S_IRWXUos.S_IRUSRos.S_IWUSRos.S_IXUSRos.S_IRWXGos.S_IRGRPos.S_IWGRPos.S_IXGRPos.S_IRWXOos.S_IROTHos.S_IWOTHos.S_IXOTH 具体它们是什么含义,就不仔细说了,基本上就是R代表读,W代表写,X代表执行权限。USR 代表用户,GRP代表组,OTH代表其它。 os.chown(path,uid,gid)改变文件的属主。uid和gid为-1的时候不改变原来的属主。 os.link(src,dst)创建硬连接 os.mkdir(path,[mode])创建目录。mode的意义参见os.chmod(),默认是0777 os.makedirs(path,[mode])和os.mkdir()类似,不过会先创建不存在的父目录。 os.readlink(path)返回path这个符号链接所指向的路径 os.remove(path)删除文件,不能用于删除目录 os.rmdir(path)删除文件夹,不能用于删除文件 os.symlink(src,dst)创建符号链接 shutil.rmtree(path[,ignore_errors[,onerror]]) 删除文件夹介绍了这么多,其实只要查一下os和shutil两个模块的文档就有了,呵呵。。真正编写 shell脚本的时候还需要注意: 1.环境变量。python的环境变量保存在os.environ这个字典里,可以用普通字典的方法修改它,使用system启动其它程序的时候会自动被继承。比如: os.environ[”fish”]=”nothing”不过也要注意,环境变量的值只能是字符串。和shell有些不同的是,python没有 export环境变量这个概念。为什么没有呢?因为python没有必要有:-) 2.os.path这个模块里包含了很多关于路径名处理的函数。在shell里路径名处理好像不是很重要,但是在python里经常需要用到。最常用的两个是分离和合并目录名和文件名: os.path.split(path) -> (dirname,basename)这个函数会把一个路径分离为两部分,比如:os.path.split(”/foo /bar.dat”)会返回(”/foo”,”bar.dat”) os.path.join(dirname,basename)这个函数会把目录名和文件名组合成一个完整的路径名,比如:os.path.join(”/foo”,”bar.dat”)会返回”/foo/bar.dat”。这个函数和os.path.split()刚好相反。 还有这些函数: os.path.abspath(path)把path转成绝对路径 os.path.expanduser(path)把path中包含的”~”和”~user”转换成用户目录 os.path.expandvars(path)根据环境变量的值替换path中包含的”$name”和”${name}”,比如环境变量 FISH=nothing,那os.path.expandvars(”$FISH/abc”)会返回”nothing/abc” os.path.normpath(path)去掉path中包含的”.”和”..” os.path.splitext(path)把path分离成基本名和扩展名。比如:os.path.splitext(”/foo /bar.tar.bz2″)返回(’/foo/bar.tar’, ‘.bz2′)。要注意它和os.path.split()的区别 3.在os模块有一个很好用的函数叫os.stat()没有介绍,因为os.path模块里包含了一组和它具有同样功能的函数,但是名字更好记一点。 os.path.exists(path)判断文件或者目录是否存在 os.path.isfile(判断path所指向的是否是一个普通文件,而不是目录 os.path.isdir(path) 判断path所指向的是否是一个目录,而不是普通文件 os.path.islink(path)判断path所指向的是否是一个符号链接 os.path.ismount(path)判断path所指向的是否是一个挂接点(mount point) os.path.getatime(path)返回path所指向的文件或者目录的最后存取时间。 os.path.getmtime(path)返回path所指向的文件或者目录的最后修改时间 os.path.getctime(path)返回path所指向的文件的创建时间 os.path.getsize(path返回path所指向的文件的大小 4.应用python编写shell脚本经常要用到os,shutil,glob(正则表达式的文件名),tempfile(临时文件),pwd(操作/etc/passwd文件),grp(操作/etc/group文件),commands(取得一个命令的输出)。前面两个已经基本上介绍完了,后面几个很简单,看一下文档就可以了。 5.sys.argv是一个列表,保存了python程序的命令行参数。其中 sys.argv[0]是程序本身的名字。不能光说不练,接下来我们就编写一个用于复制文件的简单脚本。前两天叫我写脚本的同事有个几万个文件的目录,他想复制这些文件到其它的目录,又不能直接复制目录本身。他试了一下”cp src/* dest/”结果报了一个命令行太长的错误,让我帮他写一个脚本。操起python来:import sys,os.path,shutilfor f in os.listdir(sys.argv[1]):shutil.copy(os.path.join(sys.argv[1],f),sys.argv[2]) 再试一下linuxapp版里的帖子——把一个文件夹下的所有文件重命名成 10001~10999。可以这样写:import os.path,sysdirname=sys.argv[1]i=10001for f in os.listdir(dirname):src=os.path.join(dirname,f)if os.path.isdir(src):continueos.rename(src,str(i)) i =1 os.chkdir(path) 转换到目录path 下。 os.system('md a') 可以直接创建目录。 os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。● os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。● os.getenv()和os.putenv()函数分别用来读取和设置环境变量。● os.listdir()返回指定目录下的所有文件和目录名。● os.remove()函数用来删除一个文件。● os.system()函数用来运行shell命令。● os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'rn',Linux使用'n'而Mac使用'r'。● os.path.split()函数返回一个路径的目录名和文件名。 os.path.split('/home/swaroop/byte/code/poem.txt') ('/home/swaroop/byte/code', 'poem.txt')● os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,os.path.exists()函数用来检验给出的路径是否真地存在。 文件重定向 已有PY文件new1.py ,在命令行下输入:new1>new.txt 可以将new1运行的结果输出到文件new.txt,这称为流重定向。

元芳啊 2019-12-02 01:04:36 0 浏览量 回答数 0

回答

在同一个文件夹下 调用函数: A.py文件: [python] view plain copydef add(x,y): print('和为:%d'%(x+y)) B.py文件:[python] view plain copyimport A A.add(1,2) 或[python] view plain copyfrom A import add add(1,2) 调用类: A.py文件: [python] view plain copyclass A: def __init__(self,xx,yy): self.x=xx self.y=yy def add(self): print("x和y的和为:%d"%(self.x+self.y)) B.py文件:[python] view plain copyfrom A import A a=A(2,3) a.add() 或[python] view plain copyimport A a=A.A(2,3) a.add() 在不同文件夹下 A.py文件的文件路径:E:PythonProjectwinycg B.py文件:[python] view plain copyimport sys sys.path.append(r'E:PythonProjectwinycg') '''''python import模块时, 是在sys.path里按顺序查找的。 sys.path是一个列表,里面以字符串的形式存储了许多路径。 使用A.py文件中的函数需要先将他的文件路径放到sys.path中''' import A a=A.A(2,3) a.add()

xuning715 2019-12-02 01:10:15 0 浏览量 回答数 0

问题

【精品问答】Python数据爬取面试题库100问

珍宝珠 2019-12-01 21:55:53 6502 浏览量 回答数 3

问题

mac上输入python报错?报错

爱吃鱼的程序员 2020-06-14 16:25:42 0 浏览量 回答数 1

回答

WEB开发,我们先从搭建一个简单的服务器开始,Python自带服务模块,且python3相比于python2有很大不同,在Python2.6版本里,/usr/bin/lib/python2.6/ 目录下会有 BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.py两个文件,但是在Python3.4里,就没有上面的3个文件,而是合闭到了 /usr/bin/python3.4/http/server.py文件里了。所以在python2版本中,如果想要启动python自带的服务,在doc窗口里输入:[plain] view plain copypython -m CGIHTTPServer 8081 其中8081端口号是自己可以设置的,默认端口号为8080而在python3中,因为已经将BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.py 模块合并为了server模块,所以启动服务器的代码也有所改变,为:[plain] view plain copypython -m http.server 8081 正确启动后,截图如下:在浏览器中输入localhost:端口号,即可访问

xuning715 2019-12-02 01:10:20 0 浏览量 回答数 0

回答

作者:KJ(Kan Jia)链接:https://www.zhihu.com/question/21893155/answer/29567372来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。几年前刚刚初学python的时候, 也在pygame, panda3D, 和cocos2d-python之间犹豫过.多年以后, 自己实际上也没走上游戏这个行业, 但是现在看这样的问题顿时觉得轻松很多. 偶尔需要用python写一些桌面上的类游戏的效果, cocos2d-python版本成为我的(玩票)首选. 当然如果你是以游戏开发作为终身事业, 或者希望在游戏公司找一份工作, 那么你应该换一种学习路径...首先是pygame, panda3d这样的框架和cocos2d-python的比较: 第一大小, cocos2d-python的文件大概1.4M, 依赖的pyglet大概6M(解压缩以后). 这点绝对是panda3d这样的大家伙搞不定的, pygame, 压缩包大概1.4M, 另外还有一大堆依赖包, 比如pysdl...其实这里面还有更加深刻的差别. pygame的设计和实现在2000年左右, cocos2d则出现在2008年. 从技术上, pygame依赖的是pyopengl这样的库, 而cocos2d则依赖pyglet.传统的pyopengl这样的库用的是什么做法. 一般来说, 就是将原来C语言的dll编译成适合python调用的模块(也是dll/so的形式), 所以如果你用pip或者通过源码安装pyopengl这样的库的时候, 往往需要调用gcc, 需要安装好python-dev, 需要opengl-dev, 最后生成给你一个只能在python中import的dll.pyglet为什么不同呢? 因为在它被写出来的前几年, python世界里面有一个叫ctypes的东东出现了, 不久居然被python2.5收入了标准库, 变成了可以被直接import的东西. 通过这样一个神奇的标准库, 在python中可以直接打开dll文件调用其中的函数...于是, pyglet这个库, 它全部是用python语言写了一套opengl的包装. 事实上你根本不用安装gcc编译器就能安装好pyglet这个库. 更直接的说, 从网上下载下来解压缩, 把包copy到你的项目中即可.cocos2d-python, 也是纯python写的, 没有任何binary... 这意味着, 你写一个游戏, 然后将cocos和pyglet放在同一个目录下面, 接下来, 只要是装有python2.7的mac/linux/windows, 都可以直接跑起来. 这就是干净...说完了技术上的维度, 我们再来谈谈理念上的pygame和cocos2d都有sprite的概念, 但是使用方便性上是不一样的. pygame里面基本上就是一个层, 所有的操作, 比如旋转, 缩放, 都需要引入transform来处理. 而cocos2d的layer已经能够直接旋转, 缩放了. 接下来, 在cocos2d里面, 层出不穷的action让我们感受到了无与伦比的方便. 各种action组合, 比如一边移动一边旋转, 这才是现代的游戏framework.我个人以为, 很多东西都是相通的, 如果你是cocos2d-python的程序员, 只要这些理念上理解了, 应该不妨碍做iphone或者html5去写程序. 估计就是换成flash或者sprite kit, 一样很快上手.所以, 作为一个偶尔用用的游戏框架票友, 我最近真的用cocos2d-python写了一些桌面上的东东.关于文档少的问题, 确实cocos2d-python被冷落好久了, 因为cocos2d-x什么都包含, 包括各种desktop. 但是我看了看框架代码和游戏的example, 基本上很快摸索出来了.

xuning715 2019-12-02 01:10:22 0 浏览量 回答数 0

问题

在window下安装Python的oss的SDK报错

laoziwubo 2019-12-01 19:36:37 1707 浏览量 回答数 4

问题

【精品锦集】Python热门问答02

问问小秘 2019-12-01 19:52:09 72 浏览量 回答数 1

回答

很多初学者刚开始学python的时候,一定都遇到过这个问题,python的世界有2个版本,python2 和 python3 ,而且有些语法还不兼容.怎么办~~到底应该选择哪个版本来开发呢?好,今天我们就来聊聊这个话题.1.Python2和Python3的历史背景 Python语言是在20世纪90年代诞生的,算算到现在已经是25岁的大叔级的语言了(跟它同一个时代的还有一个鼎鼎大名的java是在1995发行的, 红了几十年). 但是Python真正成名比java晚了很多年,其实也主要是应用领域的时代变迁.(猜测为啥,对了大数据的出现)Python2是Python里面一个非常重要的版本,最早的版本是从2001的时候开始的,特别是从2006年开始py2.5的发布,python的功能逐渐强大起来,慢慢开始稳定下来,并且差不多1-2年左右递增一个版本,在08年左右开始慢慢的火起来了.而Python3最早是从2008开始发布,但是py3.0的版本非常不稳定,所以社区更新的很快,差不多几个月就更新一次。所以一开始的时候并没有很多人用,只到2014春暖花开的时候python3.4 deliver了才开始慢慢稳定下来.下面我们看一个数据,这是Python社区联和一些网站在2014做的一个调查,关于Python2/3,部分的结果如下: 1).97.51%用户还在写Python2的代码 2).60%的用户写Python3的代码 3).78.09%的用户更多地写Python2代码 4).77.09%的用户认可Python3目前有一些Linux里的操作系统已经默认使用Python3: 1).Arch Linux (轻量级的Linux操作系统) 2).Ubuntu 16.04 (一个桌面应用为主的Linux操作系统) 3).Fedora(Redhat桌面版本的延续)2.Python2和Python3的主要区别: 目前最新的数据是,Python有两个版本:一个是2.7.12版,一个是3.5.12版.那么Python2运行的好好的,为啥突然要出个Python3呢,其实是为了解决Python2里面一些历史问题 第一个是字符串的问题: Python 2 中文本和二进制数据是一个烂摊子,Python中的str 是代表二进制数据还是文本数据是有二义性,文字既能代表文本数据又能代表二进制数据这很麻烦,此类错误发生的时候,我们很难意识到。第二个是对Unicode的支持 由于python是在1991年2月开源发布,这意味着它早于在1991年10月发布的第一版 Unicode 标准。在接下来几年中,晚于 Unicode 标准出现的语言都选择在支持 Unicode 编码的基础上实现自己的 str 类型,这让 Python 2 处于尴尬的境地。 目前是一个python2/3共存的时代,这两个版本是不兼容的。 python2现在只是做bug的修复,新硬件和操作系统兼容的相关维护工作。不会再有新的功能加入,python2只支持到2020年. 现在Python正在朝着3版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以目前有许多第三方库还暂时无法在3.x上使用。不过可以畅想一下,也许再过几年情况就会好很多,毕竟全世界有很多优秀的程序员正在把一些库从Py2往Py3上迁移.3.选择还是要根据自己的需求 若是企业的开发,要满足工作的需求,尤其是依赖的软件只能运行在Python2下,首选Python2.比如你的开发需要依赖大量的第三方的库(因为学Python非常大的一个原因就是因为它有成千上万的第三方包),像大量的数据分析,科学计算,还是选Python2吧.如果你是自己学习,研究的话,愿意拥抱变化,那么建议学Python3,因为它是未来的方向.结论: 编程其实主要是对编程思想的理解和经验的积累,千万不要因为纠结学Py2还是Py3而浪费大量时间。Py2和Py3里面的思想基本是相通的,招式是类似的.当你熟悉Python到一定的程序的时候,会Py2的人学Py3只需要很短的时间。所以不要再纠结细枝末节的语法差异,而耽误了宝贵的学习时间。最后说一下,原创真的不易,希望大家能够给点支持,欢迎转发转发转发,留言留言留言,重要的事情说三遍,也是对我的一点鼓励和动力. 也欢迎更多喜欢Python的同学关注微信公众号: 菜鸟学python,一起来学python吧

世事皆空 2019-12-02 01:07:50 0 浏览量 回答数 0

回答

因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。 要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。 2.x还是3.x 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的,因为现在Python正在朝着3.x版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以,目前有许多第三方库还暂时无法在3.x上使用。 为了保证你的程序能用到大量的第三方库,我们的教程仍以2.x版本为基础,确切地说,是2.7版本。请确保你的电脑上安装的Python版本是2.7.x,这样,你才能无痛学习这个教程。 在Mac上安装Python 如果你正在使用Mac,系统是OS X 10.8或者最新的10.9 Mavericks,恭喜你,系统自带了Python 2.7。如果你的系统版本低于10.8,请自行备份系统并免费升级到最新的10.9,就可以获得Python 2.7。 查看系统版本的办法是点击左上角的苹果图标,选择“关于本机”: osx-10.9 在Linux上安装Python 如果你正在使用Linux,那我可以假定你有Linux系统管理经验,自行安装Python 2.7应该没有问题,否则,请换回Windows系统。 对于大量的目前仍在使用Windows的同学,如果短期内没有打算换Mac,就可以继续阅读以下内容。 在Windows上安装Python 首先,从Python的官方网站python.org下载最新的2.7版本,网速慢的同学请移步国内镜像。 然后,运行下载的MSI安装包,在选择安装组件的一步时,勾上所有的组件: install-python-windows 特别要注意选上pip和Add python.exe to Path,然后一路点“Next”即可完成安装。 默认会安装到C:Python27目录下,然后打开命令提示符窗口,敲入python后,会出现两种情况: 情况一: python-command 看到上面的画面,就说明Python安装成功! 你看到提示符>>>就表示我们已经在Python交互式环境中了,可以输入任何Python代码,回车后会立刻得到执行结果。现在,输入exit()并回车,就可以退出Python交互式环境(直接关掉命令行窗口也可以!)。 情况二:得到一个错误: ‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。这是因为Windows会根据一个Path的环境变量设定的路径去查找python.exe,如果没找到,就会报错。如果在安装时漏掉了勾选Add python.exe to Path,那就要手动把python.exe所在的路径C:Python27添加到Path中。 如果你不知道怎么修改环境变量,建议把Python安装程序重新运行一遍,记得勾上Add python.exe to Path。 小结 学会如何把Python安装到计算机中,并且熟练打开和退出Python交互式环境

xuning715 2019-12-02 01:10:15 0 浏览量 回答数 0

问题

在Ubuntu 16里安装 python 3.6 + uWSGI + Nginx

dongshan8 2019-12-01 21:52:28 1751 浏览量 回答数 0

问题

在 Debian 8 系统里安装 seafile 服务器(mysql数据库)

dongshan8 2019-12-01 21:38:06 4969 浏览量 回答数 2

回答

建立了一个名为hi.py的文件,在里面写了两句:codeing = utf-8word= "hi,python"事实上它已经是一个模块了,下面我写了一个test.py的文件,调用这个模块:import syssys.path.append("hi.py")import hiprint hi.word运行test.py :C:Python27python.exe D:/RUANJIAN/shuju/mpdule_test.pyhi python我们看看我们做了什么:1.编写了hi.py模块,在模块中定义了变量word 2.编写了test.py,在模块中添加了test.py所在的路径3.引用hi模块4.引用模块中内容一个普通的python程序在其他程序中添加路径,就可以调用,是不是很简单?有的人就会有疑问,那么为什么我们improt 的math就没有引用呢,那是因为系统模块在生成的时候就记录了模块的所在位置,相当于系统有一个目录,目录上有math但是没有我们的hi所以我们直接import会报错。sys.path.append("hi.py") 用这种方式告诉Python解释器,我写的那个文件在哪里。在这个方法中,也用了模块import sys,不过由于sys是Python标准库之一,所以不用特别告诉Python解释器其位置。如果读者使用的是Windows系统,请学习路径方面的知识。

世事皆空 2019-12-02 01:09:34 0 浏览量 回答数 0

问题

Python-SDK 之如何实现安装?

青衫无名 2019-12-01 21:40:53 2962 浏览量 回答数 0

回答

for 循环 本系列前面 “探索 Python,第 5 部分:用 Python 编程” 一文讨论了 if 语句和 while 循环,讨论了复合语句以及适当缩进 Python 语句来指示相关 Python 代码块。该文的结尾介绍了 Python for 循环。但就其使用和功能来说,for 循环更值得关注,所以本文单独讲述该循环。 for 循环有一个简单的语法,使您可以从容器对象中提取单个项目并对其进行某些操作。简单地说,使用 for 循环,可以迭代中对象集合的项目。对象集合可以是任何 Python 容器类型,包括前面文章中讨论的 tuple、string 和 list 类型。但是容器 metaphor 的功能比这三种类型更强大。metaphor 包括其他序列类型,如 dictionary 和 set,将来的文章中将对它们进行讨论。 但是请稍等!还有更多信息:for 循环可以用于迭代支持迭代 metaphor 的任何对象,这使 for 循环非常有用。 清单 1 中显示了 for 循环的基本语法,还演示了如何在 for 循环中使用 continue 和 break 语句。 清单 1. for 循环的伪代码 ? 12345678910111213 for item in container: if conditionA: # Skip this item continue elif conditionB: # Done with loop break # action to repeat for each item in the container else: # action to take once we have finished the loop. 本系列中的第二篇文章 “探索 Python,第 2 部分:探索 Python 类型的层次结构” 介绍了 Python tuple。如文中所述,tuple 类型是不可变的异构容器。这主要是说 tuple 可以存放不同类型的对象,但是它一旦创建,就无法更改。清单 2 演示了如何使用 for 循环迭代 tuple 的元素。 清单 2. for 循环和 tuple ? 1234567891011121314151617 t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) count = 0for num in t: ... count += num... else:... print count... 45 count = 0for num in t: ... if num % 2:... continue... count += num... else:... print count... 20 本例首先创建了名为 t 的 tuple,存放整数 0 至 9(包含 9)。第一个 for 循环迭代此 tuple,在 count 变量中累计 tuple 中数值的和。一旦代码已经迭代了 tuple 中的所有元素,它将进入 for 循环的 else 子句,打印 count 变量的值。 清单 2 中显示的第二个 for 循环也迭代 tuple 中的所有元素。但是,它仅累计容器中能够被 2 整除的那些项的值(请记住如果表达式为非零,if 语句将确定为真,num 不能被 2 整除时使用 % 运算符会返回非零值)。此限制通过使用适当的 if 语句和 continue 语句来完成。如前面的文章中所述,continue 语句使包含它的循环开始下一次迭代。实现相同结果的另一种方法是测试 tuple 中的当前项是否是偶数(使用 if not num % 2:),如果为真,那么将当前项添加到运行总和中。一旦代码完成 tuple 中的迭代,将调用 else 子句,打印总和。 本系列中的第三篇文章 “探索 Python:第 3 部分:探索 Python 类型的层次结构” 讨论了 Python string。string 是不可变的同构容器,这意味着它仅能存放字符且一旦建立将无法修改。清单 3 演示了如何使用 Python string 作为 for 循环的容器。 清单 3. for 循环和 string ? 123456789101112131415161718192021 st = "Python Is A Great Programming Language!"for c in st: ... print c,... P y t h o n I s A G r e a t P r o g r a m m i n g L a n g u a g e ! count = 0for c in st: ... if c in "aeiou":... count += 1... else:... print count...10 count = 0for c in st.lower(): ... if c in "aeiou":... count += 1... else:... print count... 12 本例提供了三个不同的 for 循环,它们都迭代同一 string。第一个 for 循环迭代 string “Python Is A Great Programming Language!” 并一次打印 string 中的一个字符。在此例中,print 语句变量 c 后加了一个逗号。这使 print 语句打印字符值时后面跟着空格字符,而不是换行字符。如果没有后面的逗号,字符将全部打印在单独的行中,会很难读。 下两个 for 循环迭代该字符串并计算其包含多少个元音字母(“a”、“e”、“i”、“o” 或 “u”)。第二个 for 循环在迭代原始 string 时仅查找小写元音字母。第三个 for 循环迭代通过调用 string 对象的 lower 方法返回的临时 string。lower 方法将 string 中的所有字符转换为小写。因此,第三个 for 循环可找到另外两个元音字母。 本系列中的第四篇文章 “探索 Python,第 4 部分:探索 Python 类型的层次结构” 介绍了 Python list。list 是异构可变容器,这意味着它可以存放不同类型的对象且创建后可以修改。清单 4 演示了如何使用 list 和 for 循环。 清单 4. for 循环和 list ? 12345678910 mylist = [1, 1.0, 1.0j, '1', (1,), [1]]for item in mylist: ... print item, "t", type(item))... 1 1.0 1j 1 (1,) [1] 既然 list 是很灵活的 Python 容器类型(您将在本系列其余的文章中多次看到它),本例看起来可能过于简单了。但是,这是一部分要点:使用 for 循环使处理容器中的每个项目非常简单,甚至处理包含各种不同对象的 list 也是如此。本例迭代 Python list 中的所有项目,并在单独的行中打印每一项及其相对应的 Python 类型。 迭代和可变容器 Python list 是一个可变序列,提供了一种令人好奇的可能性:for 循环主体可以修改其正在迭代的 list。正如您可能认为的,这样并不好,如果进行此操作,Python 解释器将无法很好地工作,如清单 5 所示。 清单 5. 在 for 循环中修改容器 ? 1234567891011121314151617 mylist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]for item in mylist: ... if item % 2:... mylist.insert(0, 100)... ^CTraceback (most recent call last): File "", line 3, in ?KeyboardInterrupt print mylist [100, ...., 100, 100, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Many lines deleted for clarity mylist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]for item in mylist[:]: ... if item % 2:... mylist.insert(0, 100)... print mylist [100, 100, 100, 100, 100, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 本例中的第一个 for 循环只要在原始 list 中发现奇数,它就在 list 的开始插入数值 100。当然,这是一种演示此问题的不同寻常的方式,但却非常好。一旦在三个点的 Python 提示后按 Enter 键,Python 解释器就处于无限循环的混乱中。要停止这种混乱,必须通过按 Ctrl-C(其在 Python 输出中显示为 ^C)来中断进程,然后会出现 KeyboardInterrupt 异常。如果打印出修改的 list,将看到 mylist 现在包含大量的值为 100 的元素(新元素的准确数量取决于您中断循环的速度)。 本例中的第二个 for 循环演示了如何避免此问题。使用切片运算符创建原始 list 的副本。现在 for 循环将迭代该副本,而对原始 list 进行修改。最终的结果是修改后的原始 list,它现在以五个值为 100 的新元素开始。 for 循环和序列索引 如果您用过其他编程语言,Python for 循环可能看起来有点儿古怪。您可能认为它更像 foreach 循环。基于 C 的编程语言具有 for 循环,但它的设计目的是对一系列操作执行特定次数。Python for 循环可以通过使用内置的 range 和 xrange 方法来模拟该行为。清单 6 中演示了这两种方法。 清单 6. range 和 xrange 方法 ? 12345678910 r = range(10)print r [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] type(r) xr = xrange(10)print xr xrange(10) type(xr) 本例首先演示了 range 方法,它创建一个包含一系列整数的新 list。调用 range 方法的一般形式是提供单个值,用作整数 list 的上限。零为起始值。因此,调用 range(10) 将创建包含整数 0 至 9(包含 9)的 list。range 方法接受起始索引以及步长。所以,调用 range(11,20) 将创建从 11 至 19(包含 19)的整数 list,而调用 range(12, 89, 2) 将创建从 12 至 88 的偶数 list。 由于 xrange 方法也创建整数 list(其使用相同参数),所以它与 range 方法非常相似。但是,xrange 方法仅在需要时才在 list 中创建整数。例如,在清单 6 中,尝试打印出新创建的 xrange 时除了 xrange 的名称,不会显示任何数据。当需要迭代大量整数时,xrange 方法更适用,因为它不会创建极大的 list,那样会消耗大量计算机内存。 清单 7 演示了如何在 for 循环内使用 range 方法来创建整数 1 至 10(包含 10)的乘法表。 清单 7. 创建乘法表 ? 123456789101112131415 for row in range(1, 11): ... for col in range(1, 11):... print "%3d " % (row * col),... print... 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 本例使用两个 for 循环,外面的 for 循环关注乘法表中的每一行,嵌套的 for 循环关注每行内的列。每个循环都迭代包含整数 1 至 10(包含 10)的 list。最里面的 print 语句使用了一个名为 字符串格式化 的新概念来创建格式设置精美的表。字符串格式化是一种非常有用的技术,用于以格式设置精美的布局创建由不同数据类型组成的 string。现在详细信息并不重要,将来的文章中将讲述这些内容(了解 C 编程语言的 printf 方法的任何人都会很熟悉这些内容)。在本例中,字符串格式化指定将从整数创建新 string 且需要保留三个字符来存放该整数(如果该整数小于三个字符,将在左边用空格填补,从而使数据排列整齐)。第二个 print 语句用于打印新行,从而使乘法表中的下一行被打印在新的行中。 range 方法还可用于迭代容器,通过使用适当的索引访问序列中的每一项。要进行此操作,需要包含容器的允许范围索引值的整数 list,这可以通过使用 range 方法和 len 方法来轻松实现,如清单 8 所示。 清单 8. 在 for 循环内索引容器 ? 1234567891011121314 st = "Python Is A Great Programming Language!"for index in range(len(st)): ... print st[index],... P y t h o n I s A G r e a t P r o g r a m m i n g L a n g u a g e ! for item in st.split(' '): ... print item, len(item)... Python 6Is 2A 1Great 5Programming 11Language! 9 这个最后的示例演示了如何使用 len 方法作为 range 方法的参数,创建可用于单独访问 string 中每个字符的整数 list。第二个 for 循环还显示了如何将 string 分割为子字符串的 list(使用空格字符来指示子字符串的边界)。for 循环迭代子字符串 list,打印每个子字符串及其长度。

xuning715 2019-12-02 01:10:25 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SQL审核 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 人工智能 阿里云云栖号 云栖号案例 云栖号直播