python允许无止境的循环吗_Python第一天 - 思想永无止境的个人页面 - OSCHINA - 中文开源技术交流社区...

下载安装python以及相关软件。

python

直接到python官网下windows-msi文件,版本根据需要下2.7或3.0。

pydev

自己网上搜,pydev官网的反而不行(eclipse上安装失败)。

java

oracle官网

eclipse

eclipse官网

配置pydev

新建一个Python Interpreter,选择python安装目录的Python.exe

python基础

数据类型

整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

字符串

字符串是以’‘或”“括起来的任意文本,比如’abc’,”xyz”等等。请注意,’‘或”“本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。如果’本身也是一个字符,那就可以用”“括起来,比如”I’m OK”包含的字符是I,’,m,空格,O,K这6个字符。

如果字符串内部既包含’又包含”怎么办?可以用转义字符来标识,比如:

‘I’m “OK”!’ 表示的字符串内容是:

I’m “OK”!

转义字符可以转义很多字符,比如n表示换行,t表示制表符,字符本身也要转义,所以\表示的字符就是。

>>> print 'I\'m ok.'

I'm ok.

>>> print 'I\'m learning\nPython.'

I'm learning

Python.

>>> print '\\\n\\'

\\

如果字符串里面有很多字符都需要转义,就需要加很多,为了简化,Python还允许用r’‘表示’‘内部的字符串默认不转义。

>>>print '\\\t\\'

\ \

>>>print r'\\\t\\'

\\\t\\

布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

布尔值可以用and、or和not运算。

and运算是与运算,只有所有都为True,and运算结果才是True。

or运算是或运算,只要其中有一个为True,or运算结果就是True。

not运算是非运算,它是一个单目运算符,把True变成False,False变成True。

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型。

变量

没啥可讲的,和所有语言都一样。

常量

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359 但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。

不可变的类型都是常量, 整数,小数,字符串等。

字符编码

编码有很多种,ASCII,utf8,gbk,等等。

Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

但unicode占用空间较多。

字符串

因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串’ABC’在Python内部都是ASCII编码的。Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换:

>>>ord('A')

65

>>>chr(65)

'A'

Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u’…’表示,比如:

>>>print u'中文'

中文

>>>u'中'

u'\u4e2d'

写u’中’和u’u4e2d’是一样的,u后面是十六进制的Unicode码。因此,u’A’和u’u0041’也是一样的。

两种字符串如何相互转换?字符串’xxx’虽然是ASCII编码,但也可以看成是UTF-8编码,而u’xxx’则只能是Unicode编码。

把u’xxx’转换为UTF-8编码的’xxx’用encode(‘utf-8’)方法:

>>>u'ABC'.encode('utf-8')

'ABC'

>>>u'中文'.encode('utf-8')

'\xe4\xb8\xad\xe6\x96\x87'

英文字符转换后表示的UTF-8的值和Unicode值相等(但占用的存储空间不同),而中文字符转换后1个Unicode字符将变为3个UTF-8字符,你看到的xe4就是其中一个字节,因为它的值是228,没有对应的字母可以显示,所以以十六进制显示字节的数值。len()函数可以返回字符串的长度:

>>>len(u'ABC')

3

>>>len('ABC')

3

>>>len(u'中文')

2

>>>len('\xe4\xb8\xad\xe6\x96\x87')

6

反过来,把UTF-8编码表示的字符串’xxx’转换为Unicode字符串u’xxx’用decode(‘utf-8’)方法:

>>>'abc'.decode('utf-8')

u'abc'

>>>'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

u'\u4e2d\u6587'

>>>print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

中文

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行::

#!/usr/bin/env python

# -*- coding: utf-8 -*-

格式化

在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:

>>>'Hello, %s' % 'world'

'Hello, world'

>>>'Hi, %s, you have $%d.' % ('Michael', 1000000)

'Hi, Michael, you have $1000000.'

你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

常见的占位符有:

%d 整数 %f 浮点数 %s 字符串 %x 十六进制整数 其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

>>>'%2d-%02d' % (3, 1)

' 3-01'

>>>'%.2f' % 3.1415926

'3.14'

如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:

>>>'Age: %s. Gender: %s' % (25, True)

'Age: 25. Gender: True'

对于Unicode字符串,用法完全一样,但最好确保替换的字符串也是Unicode字符串:

>>>u'Hi, %s' % u'Michael'

u'Hi, Michael'

有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:

>>>'growth rate: %d %%' % 7

'growth rate: 7 %'

list

list 是Python内置的一种数据类型是列表。list是一种有序的集合(有序的意思就是你可以给它排序),可以随时添加和删除其中的元素。

比如,列出班里所有同学的名字,就可以用一个list表示:

>>>classmates = ['Michael', 'Bob', 'Tracy']

>>>classmates

['Michael', 'Bob', 'Tracy']

用len()函数可以获得list元素的个数。

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:

>>>classmates[-1]

'Tracy'

以此类推,可以获取倒数第2个、倒数第3个。

使用append(数据)方法往list中追加元素到末尾。

使用insert(索引,数据)方法插入数据到指定的位置。

使用pop()删除末尾元素。

使用pop(索引)方法,删除指定位置的元素。

list里面的元素的数据类型也可以不同,比如:

>>>l = ['Apple', 123, True]

list元素也可以是另一个list,比如:

>>>s = ['python', 'java', ['asp', 'php'], 'scheme']

tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

>>>classmates = ('Michael', 'Bob', 'Tracy')

也可以称tuple为一个特殊的list,只是list中的值不能修改。

tuple中的元素本身是可以改变的:

>>> t = ('a', 'b', ['A', 'B'])

>>> t[2][0] = 'X'

>>> t[2][1] = 'Y'

>>> t

('a', 'b', ['X', 'Y'])

dict

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。

dict就是第二种实现方式,给定一个名字,比如’Michael’,dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。

你可以猜到,这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

>>>d['Adam'] = 67

>>>d['Adam']

67

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值覆盖掉。

如果key不存在,dict就会报错,要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:

>>>'Thomas' in d

False

二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('Thomas')

>>> d.get('Thomas', -1)

-1

注意:返回None的时候Python的交互式命令行不显示结果。

要删除一个key,用pop(key)方法,对应的value也会从dict中删除

和list比较,dict有以下几个特点:

查找和插入的速度极快,不会随着key的增加而增加; 需要占用大量的内存,内存浪费多。 而list相反:

查找和插入的时间随着元素的增加而增加; 占用空间小,浪费内存很少。 所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

>>> key = [1, 2, 3]

>>> d[key] = 'a list'

Traceback (most recent call last):

File "", line 1, in

TypeError: unhashable type: 'list'

这点和Java很不相同。

set

set和dict类似,也是一组key的集合,但不存储value,和Java的HashSet一样。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])

>>> s

set([1, 2, 3])

注意,传入的参数[1, 2, 3]是一个list,而显示的set([1, 2, 3])只是告诉你这个set内部有1,2,3这3个元素,显示的[]不表示这是一个list。

重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])

>>> s

set([1, 2, 3])

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

>>>s.add(4)

>>>s

set([1, 2, 3, 4])

>>>s.add(4)

>>>s

set([1, 2, 3, 4])

通过remove(key)方法可以删除元素。

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])

>>> s2 = set([2, 3, 4])

>>> s1 & s2

set([2, 3])

>>> s1 | s2

set([1, 2, 3, 4])

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。

条件判断

和所有语言一样

只需注意以下几点:

else if可以简写成elif

判断条件可以是非布尔类型,只要是非零数值、非空字符串、非空list等,就判断为True,否则为False,这点和PHP一样。

循环

Python的循环有两种,一种是for…in循环,依次把list、tuple、dict中的每个元素迭代出来,看例子::

names = ['Michael', 'Bob', 'Tracy']

for name in names:

print name

for循环可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value:

>>>d = {'x': 'A', 'y': 'B', 'z': 'C' }

>>>for k, v in d.iteritems():

print k, '=', v

y = B

x = A

z = C

Python提供一个range()函数,可以生成一个整数序列,比如range(5)生成的序列是从0开始小于5的整数。

第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现::

i= 0

while i

print names[i]

i++

切片

取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:

>>>L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

>>>L[0:3]

['Michael', 'Sarah', 'Tracy']

L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。

如果第一个索引是0,还可以省略:

>>> L[:3]

同样支持倒数切片:

>>>L[-2:]

['Bob', 'Jack']

>>>L[-2:-1]

['Bob']

前10个数,每两个取一个:

>>>L = range(100)

>>>L[:10:2]

[0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5]

[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

甚至什么都不写,只写[:]就可以原样复制一个list:

>>> L[:]

[0, 1, 2, 3, ..., 99]

字符串’xxx’或Unicode字符串u’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

>>>'ABCDEFG'[:3]

'ABC'

>>>'ABCDEFG'[::2]

'ACEG'

在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

列表生成式

列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式。

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):

>>> range(1, 11)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?

>>>[x * x for x in range(1, 11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

>>>[x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>>[m + n for m in 'ABC' for n in 'XYZ']

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

>>>import os # 导入os模块

>>>[d for d in os.listdir('.')] # os.listdir可以列出文件和目录

['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']

列表生成式也可以使用两个变量来生成list:

>>>d = {'x': 'A', 'y': 'B', 'z': 'C' }

>>>[k + '=' + v for k, v in d.iteritems()]

['y=B', 'x=A', 'z=C']

最后把一个list中所有的字符串变成小写:

>>>L = ['Hello', 'World', 'IBM', 'Apple']

>>>[s.lower() for s in L]

['hello', 'world', 'ibm', 'apple']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

socket 编程入门教程(一)TCP server 端:5、创建监听嵌套字

前面一小节,我们已经写出了TcpServer的构造函数。这个函数的实际作用,就是创建了listen socket(监听嵌套字)。这一节,我们来具体分析这个创建的过程。socket和sockaddr的创建是可以相互独立的在函数中,我们…

GIS之土地利用数据下载

下载链接: 全球地表覆盖-数据浏览 数据说明: 具体请查看官网: 全球地表覆盖-产品介绍 下载步骤:

Scribe应用实例

源代码里所给的example很简单,但大体上了模拟了其运行的过程,分三个部分。可参考里面的README文件:Configurarion(配置)、Running Scribe Server(运行服务器)、Logging messages(记录…

群晖docker签到京豆_利用Synology(群晖)Docker安装签到框架

利用Synology(群晖)Docker安装签到框架Mark • 2018 年 05 月 15 日1、前言之前一直想自己开一套WEB签到工具用,一方面是精力有限(老了),另一方面技术能力欠佳一直没有搞。去年时候在偶然机会下在V2ex了解到Binux大佬开发的一套签到框架系统qiandao&…

socket 编程入门教程(一)TCP server 端:6、创建“通讯 ”嵌套字

这里的“通讯”加上了引号,是因为实际上所有的socket都有通讯的功能,只是在我们的例子中,之前那个socket只负责listen,而这个socket负责接受信息并echo回去。我们现看看这个函数:boolTcpServer::isAccept() { unsi…

python离线安装pip出现timeout_Python pip安装包出现timeout的解决办法,修改国内的镜像源...

今天安装django时老是出现timeoutWARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by ConnectTimeoutError(at 0x00000000044BC9B0>, Connection to pypi.org timed out. (connect timeout15)): /simple/dian…

DIY_DE2开发板介绍

Altera官方有一个DE2开发板,该开发板的资源很丰富,外设也很齐全,采用的是十层电路板设计,价格自然很高了。本人仿照其原理图自制了一块,叫做DIY_DE2开发板。开发板采用核心板和底板的模式,方便使用&#xf…

socket 编程入门教程(一)TCP server 端:7、接收与发送

现在,我们通过accept()创建了新的socket,也就是我们类中的数据成员communicationSock,现在,我们就可以通过这个socket进行通讯了。TCP通讯模型在介绍函数之前,我们应该了解一些事实。TCP的Server/Client模型类似这样&a…

利用ROC找阈值点cutpoint

def Find_Optimal_Cutoff(TPR, FPR, threshold):y TPR - FPRYouden_index np.argmax(y)#阈值optimal_threshold threshold[Youden_index]#阈值对应的点point [FPR[Youden_index], TPR[Youden_index]]return optimal_threshold, pointtest_fpr, test_tpr, test_thresholds …

json中怎么去掉[]外的引号_如何正确检查发动机中的机油量?从机油尺处向外窜气是怎么回事?...

机油是发动机的血液,发动机中必须有足够多的机油,才能完成润滑、冷却等任务。为了让驾驶员随时能够查看到发动机中机油的存量,在发动机上都设置了一个机油尺,我们只要把它拔出来,就可以查看机油的液位了;而…

flex常见问题归纳

flex警告:swc“D:\Adobe\Adobe Flash Builder 4.5\sdks\4.5.1\frameworks\libs\framework.swc”具有默认样式并且在 library-path 中,表示依赖项将不带有样式进行链接。这可能会导致使用输出 swc 的应用程序出现外观丢失的现象。swc 应该放置在 external…

arcgis符号系统的分类方法介绍

使用标准分类方案 类范围和间隔的定义方式可确定属于各个类的数据的量以及地图的外观。分类方案包括两个主要部分:组织数据所参照的类数目以及指定类时所依据的方法。类数目取决于您的分析目的。然而,需要对为类分配数据时所依据的规则进行简要说明。对…

k8s往secret里导入证书_k8s中secret解析

概览Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。用户可以创建自己的secret&#x…

HDU1856_More is better

题目大意: 让你输入n,然后输入n组数据,表示a与b的关系,最后求出关系最多一组的个数。注意(a与b有关系,b与c有关系,那么a与c就有关系) 解题思路: 并查集,…

html爱心代码

此处填写你爱人的名字 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!doctype html> <html> <head><meta charset&qu…

Linux TCP server系列(4)-浅谈listen与大并发TCP连接

背景&#xff1a; 服务器在调用listen和accept后&#xff0c;就会阻塞在accept函数上&#xff0c;accpet函数返回后循环调用accept函数等待客户的TCP连接。如果这时候又大量的用户并发发起connect连接&#xff0c;那么在listen有队列上限(最大可接受TCP的连接数)的情况下&#…

领航机器人广告段子_医院机器人物流广告词_段子网收录最新段子

瑞典RJO医疗供应商&#xff0c;机器人自助式物流领航者&#xff0c;拥有自己的机器人工作组&#xff0c;让医院处处散发出高科技。使用机器人物流体系&#xff0c;医院内部运输物料在标准化、可控、准时、高效方面有质的改变&#xff0c;大大提高医院对外形象。特征集广告词&am…

分享制作精良的知识管理系统 配置SQL Server文档数据库 完美实现博客文章的的下载,存储和浏览...

前一篇文章《分享制作精良的知识管理系统 博客备份程序 Site Rebuild》已经提到如何使用Site Rebuild来下载您所喜欢的博客文章&#xff0c;但是还不能实现把下载的文件导入进数据库中&#xff0c;无法实现在线浏览服务器中的文档数据。这一篇文章则帮助您建立文档数据库&#…

python绘制敏感性和特异性曲线(交叉)

示例 代码如下 test_fpr, test_tpr, test_thresholds roc_curve(y_test_two, dataset_blend_test_pred, pos_label1) test_roc_auc auc(test_fpr, test_tpr) plt.plot(test_thresholds, 1-test_fpr, labelspecificity) plt.plot(test_thresholds, test_tpr, labelsensitivit…