今天一起走进python的代码世界,一起领悟python的魅力

在很多学习python的书中都会以 print  “Hello,world!” 这样的而一个程序为开始,那么其中的 hello,world 是什么?他就是本章要讲解的字符串

一、单引号,双引号和转义引号

(1)在一般的时候 ‘Hello,world!’ 和 “Hello,world!” 是没有什么区别的,那么为什么会两个都可以用呢?是因为在某些情况下,他们会排上用处

 >>> "Hellow,world"
'Hellow,world'
>>> 'Hellow,world'
'Hellow,world'

(2)在下面的代码中,第一段字符串包含了单引号,所以呢整体就不能用单引号包括起来,如果这样做的话,解释器就会抱怨(它这么做也是对的)

 >>> "Let's go!"
"Let's go!"
>>> 'Ler's go!'
SyntaxError: invalid syntax

(3)虽然上面的代码,用双引号执行时成功的,但是我们不一定要这么来去做,这里就涉及到转义(\),这样做Python就会明白其中一个单引号是一个字符

>>> 'Ler\'s go!'
"Ler's go!"

二、字符串拼

(1)如果我们想输出这样下例的字符,那么我们是不是需要用很多的(\),如果我们不想用反斜线怎么办?这里我们可以通过另外一种方法实现

我们只是接连写了两个字符串,Python会自动连成一个字符串(这种机制用的不多)

 >>> "\"Hellow\",world!"
'"Hellow",world!'
>>> #字符串拼接 >>> '"Hellow"'',world!'
'"Hellow",world!'

(2)另外一种方法就行+号一样将字符串拼接起来,下面是使用变量来定义字符

 >>> "Hellow,"+"world!"
'Hellow,world!'
>>> x = "Hellow,"
>>> y = "world!"
>>> x+y
'Hellow,world!'

注!python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

(3)在我们想将字符串跟数字相连时我们需要使用反引号,例如

 >>> aa = 22
>>> print "aaaa"+aa Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
print "aaaa"+aa
TypeError: cannot concatenate 'str' and 'int' objects >>> print "aaaa"+`aa`
aaaa22

三、字符串表示str和repr

(1)在例子中我们发现,通过Pyrhon打印的字符串还是被引号括起来的,这是因为Python打印值的时候会保持在Python代码中的状态,如果你不想看见这个状态我们使用“Print”语句结果就不一样了

 >>> print"Hello,world"
Hello,world
>>> "Hello,world"
'Hello,world' >>> print 1000L
1000
>>> 1000L
1000L

(2)可以看到长整形数字1000L在print时候转换成1000,但是当我们想知道这个值是长整形还是整形怎么办,实际上字符串这两种机制都是由str和repr来实现的,srt我们称为对人类友好的也就是方便人类理解,repr对机器友好方便Python表达式下面我们举些例子

>>> print repr("Hello")
'Hello'

>>> print str("Hello")

Hello

注意!在Python3.0中,已经不在使用反引号了

四、input和raw_input的比较(用户交互)

(1)我们已经知道了“Hello,“+name+”!”是什么意思了,那么raw_input和input是什么区别呢我没看下面的例子,这个例子看似很合理但是执行是错误的

 >>> name = input("what is you name?")
what is you name?xiaoyuan Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
name = input("what is you name?")
File "<string>", line 1, in <module>
NameError: name 'xiaoyuan' is not defined

这是因为,要求我们输入用户名使用引号

 >>> name = input("what is you name?")

 what is you name?"xiaoyuan"
>>>

所以呢我们尽量使用raw_input,在3.5版本中取消了raw_input

五、长字符串、原始字符串

(1)长字符串,如果需要写一个非常非常长的字符串,它需要跨多行,那么,可以使用3个引号代替普通的引号,

 >>> print ''' Hi there you are outside
Please sign for it'''
Hi there you are outside
Please sign for it

对于普通的引号,可以使用\n来换行

 >>> print "Hi there you are outside \n Please sign for it"
Hi there you are outside
Please sign for it

(2)我们知道了,\n可以来换行,如果我们想要输出一个路径”C:\new”这样的字符串,我们该怎么办呢!

 >>> new = "C:\new"

 >>> print new
C:
ew

当然我们可以使用反斜线来转意,但是当路径非常长的时侯呢?所以这里我们使用原始字符串:以r开头

 >>> new = r"C:\new"
>>> print new
C:\new

六、字符编码

(1)在Python解释器加载.py 文件中的代码时,会对内容进行编码(默认ascill)ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

(2)很显然显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode,Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多

(3)UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是代码当中有中文就会报错。

#!/usr/bin/env python
print "你好明天"

File "E:/pycharm/exercise/date_1/�����˵�/ceshi-2.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file E:/pycharm/exercise/date_1/�����˵�/ceshi-2.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

所以应该告诉Python解释器用什么编码来执行源代码

#!/usr/bin/env python

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

print "你好明天"

七、注释

当行注视:# 被注释内容

多行注释:""" 被注释内容 """

八、Python内部执行过程

(1)当我们执行某个.py的文件时,我们Python内部时这样执行的

PYthon成长之路第一篇(1)__字符串初识的更多相关文章

  1. Python成长之路第一篇(2)-初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  2. Python成长之路第一篇(2)__初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  3. python成长之路第一篇(5)文件的基本操作

    一.三元运算 我们在上章学习的if,,else,,有一种简便的方法 他的表达式是这样的:变量 = 值1 if 条件 else 值2 解释过来就是如果aaa等于sss则输出值1否则输出值2 二.类的概念 ...

  4. Python成长之路第一篇(3)_初识字典

    经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之 ...

  5. Python成长之路第一篇(4)_if,for,while条件语句

    有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...

  6. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)

    2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...

  7. 我的Python成长之路---第一天---Python基础(2)---2015年12月26日(雾霾)

    三.数据类型 Python基本类型(能够直接处理的数据类型有以下几种)主要有5种 1.整数(int) Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如 ...

  8. python成长之路——第一天

    一.python版本间的差异: 1.1:2.x与3.x版本对比 version 2.x 3.x print print " "或者print()打印都可以正常输出 只能print( ...

  9. Python成长之路第二篇(1)_数据类型内置函数用法

    数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> a ...

随机推荐

  1. Struct和Class的区别

    转载至:http://blog.csdn.net/yuliu0552/article/details/6717915 C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数 ...

  2. arm mov 指令

    语法格式: mov {条件} 1目的寄存器,2源操作数 作用: MOV指令可完成从另一个寄存器.被移位的寄存器或立即数赋值到目的寄存器.其中S选项为指令的操作结果是否操作CPSR中的条件标志位,当没有 ...

  3. MYSQL插入处理重复键值的几种方法

    当unique列在一个UNIQUE键上插入包含重复值的记录时,默认insert的时候会报1062错误,MYSQL有三种不同的处理方法,下面我们分别介绍. 先建立2个测试表,在id列上创建unique约 ...

  4. oracle add_months函数的用法详解

    如果需要取上一个月的数据,并且每天都要进行此操作,每次都需要改时间,的确非常的麻烦,所以想到了oracle add_months函数这个函数 oracle add_months函数: oracle a ...

  5. 详解如何在linuxmint上用源码包安装nodejs

    第一步:安装依赖包   因为Linuxmint 和 Ubuntu 同属 Debian系的Linux,而且Linuxmint是建立在Ubuntu的基础上的,所以Ubuntu下的命令和包,Linuxmin ...

  6. 1002 Fire Net

    用递归实现各种情况的枚举,可以看做是考察DPS的简单实现. #include <stdio.h> ][]; int place(int x,int y){ int i; ;i--){ ) ...

  7. 为openwrt编译xd-h3c

    西电老校区,openwrt上用的认证软件. 在package下新建一目录"xd-h3c",在里面新建一个Makefile,内容如下: include $(TOPDIR)/rules ...

  8. C# 弗洛伊德(Floyd)算法

    弗洛伊德(Floyd)算法 主要是用于计算图中所有顶点对之间的最短距离长度的算法,如果是要求某一个特定点到图中所有顶点之间的最短距离可以用;        ;    ;    ;            ...

  9. Cxf -Wsdl2java详细参数附录

    wsdl2java用法: wsdl2java -p com -d src -all  aa.wsdl -p  指定其wsdl的命名空间,也就是要生成代码的包名: -d  指定要产生代码所在目录 -cl ...

  10. JavaEE Tutorials (25) - 使用Java EE拦截器

    25.1拦截器概述380 25.1.1拦截器类381 25.1.2拦截器生命周期381 25.1.3拦截器和CDI38125.2使用拦截器381 25.2.1拦截方法调用382 25.2.2拦截生命周 ...