Python 学习之路 --------3

1.集合的操作                      

集合是无序的,而且集合没有重复的元素

常用操作:

s = set([2,3,5,6,576])                   #创建一个集合
t = set([2,7,4,345])                       #创建一个集合

 

a = t | s                                 # t和s的并集
b = t & s         # t和s的交集
c = t - s          # 求t对s的差集(项在t中,不在s中)
d = t ^ s         # 对称差集(项在t或s中,但不会同时出现在二者中)

 

t = set([2,3,5,6,576])
s = set([2,7,4,345])

1.方法Intersection() 并集

  print(t.intersection(s))

   输出:{2}

 

2.方法union()交集

  print(t.union(s)
   输出:{576, 2, 3, 4, 5, 6, 7, 345}

 

3.方法difference()差集

print(t.difference(s))

4.对称差集

方法:symmetric_difference()

其他方法:
t.add                                  #添加项

t.update                             #添加多项

t.remove           #删除相

x in s

x not in s

s.issubset(t)        #s中每个元素是否在t中

s.issuperset(t)     #t中每个元素是否在s中

 

2.文件操作                       

文件操作:

  1)打开文件

  2)对文件对象进行操作

  3)关闭文件

用with模块打开文件,当结束模块时自动关闭文件,如:
with open("py_file.py") as f:


   first_line = f.readline()
  print('first line:',first_line)    #读一行
  print('我是分隔线'.center(50,'-'))
  data = f.read()             # 读取剩下的所有内容,文件大时不要用
  print(data)               #打印文件
 
 文件打开模式
  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

其他方法:

  readline()                             #读取一行,光标到第二行开始出,第二次调用readline(),读取下一行内容

  tell()            #打印当前光标的位置

  seek()         #传入一个参数int 将光标移动到这个位置

3.字符编码                        

详细文章:

http://www.cnblogs.com/yuanchenqi/articles/5956943.html

http://www.diveintopython3.net/strings.html

.在python2默认编码是ASCII, python3里默认是unicode

***字符编码就是一个大坑,如果不彻底搞清楚,我们就会在将来踩很多坑

最早的编码ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

 

为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

 显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

特别的在python3中默认字符编码是utf-8,在python2中默认编码是acssi码

任何编码转换过程都需要先编译成万国码(unicode)在编译成对应的编码。在python中将utf-8转换成ACSSI编码

第一步 要解码(decode)到unicode,在编码(encode)到ACSSI码

 

4.函数                                                  

1.函数有什么用呢?

函数就像一个包装盒,它会把一段代码包装起来,给包装盒其一个名字,在下一次要用的时候 直接调用包装盒的名字。比如在多次调用时,我们就不必重复输入同样的代码了

2.函数关键子:def

  格式 def <name>;
      body

比如:函数

  def print_name():
    name = "noble"
    print = name

当调用函数print_name()时就会打印noble

 

3.参数

  1.函数可以接受参数,并处理

  如:

      def print_name(name):
          print(name)

      当调用print_name("noble")时就会打印noble

参数可以是任意类型:数组,字典,可变长参数(*args(列表)     **kwargs(字典))

  2.参数类型

    默认参数:

      def person(name,age=18):
        print(name,age)

调用person(“noble”) 不会出错,当不给age赋值时,age默认为18

    *args

      def name(*args):
        print(*args)
      name([2,3,4,5])

      输出:([2, 3, 4, 5])

    **kwargs

      def name(**kwargs):
        print(kwargs)
      name(name = "noble")
      

      输出:{name:"noble"}

  3.返回值

    关键字:return

      在函数结束时可以返回一个值,用来反映函数的执行状态,在编程中该函数的返回值可能对后续代码执行作出影响

  

5.局部变量                                                 

name = "Noble"
 
def change_name(name):
    print("before change:",name)
    name = "Pitifulnoble"
    print("after change", name)
 
 
change_name(name)
 
print("在外面看看name改了么?",name)

输出

before change: Noble
after change Pitifulnoble
在外面看看name改了么? Noble

全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

 

6.递归                                                  

ef calc(n):

    print(n)
    if int(n/2) ==0:
        return n
    return calc(int(n/2))
 
calc(10)
 
输出:
10
5
2
1

递归特性:

1. 必须是可结束的

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

 

posted @ 2017-12-18 20:23  pitifulnoble  阅读(64)  评论(0)    收藏  举报