zoukankan      html  css  js  c++  java
  • Python3学习(一)-基础、数据类型、变量、字符串和编码、list&tuple、if、for、while、dict、set、函数与参数

    ##廖雪峰py3笔记
    
    ## '//'这是获得相除后的整数部分
    ##a = 10//3
    ##print (a)
    
    ## '/'获得相除后的结果,为浮点数,结果能整除也也是浮点数
    ##b = 10/3
    ##print(b)
    ##c = 9/3
    ##print (c)
    
    ##输入输出
    ##name = input('please enter your name:')
    ##print('hello,',name)
    ##结果:
    ##please enter your name:jianweiwei
    ##hello, jianweiwei
    
    ##编码
    ##美国字母数据是用的ascii编码,占用一个字节,unicode 是世界公用编码,占用4个字节,Utf_8是新的
    ##国际编码标准,可以根据字符所的编码难易程序,来分配对应的长度,如,在Utf-8中,英文字母是占用1个字节,
    ##中文占用3个字节。
    
    ##py字符串
    ##对于单个字符的编码,ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。
    ##ord('a')#97
    ##print(ord('a'))
    ##print(ord('中'))#20013
    ##print(chr(88))#X
    ##print(chr(25991))#文
    
    ##py的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节,如果要在网络上传输,或者保存到
    ##保存到磁盘上,就需要把str变为以字节为单位的bytes.
    ##对bytes类型的数据用带b前缀的单引号或双引号表示:
    ##x = b'ABC'#表示bytes类型的数据,每个字符只占一个字节,‘ABC’表示str字符串,用Unicode编码
    ##print(x)#结果:b'ABC'
    
    ##以Unicode表示的str通过encode()(编码)方法可以编码为指定的bytes,例如:
    ##x = 'ABC'.encode('ascii')
    ##print(x)#结果b'ABC',表示把str类型的'ABC'编码为b'ABC'的以字节为单位的bytes类型的
    ##x = '中文'.encode('utf-8')
    ##print(x)#结果:b'xe4xb8xadxe6x96x87',把中文变成了bytes.
    ##x = '我爱大树'.encode('utf-8')
    ##print (x) #b'xe6x88x91xe7x88xb1xe5xa4xa7xe6xa0x91'
    
    ##纯英文的str可以用ASCII编码为bytes,含有中文的str可以用utf-8编码为bytes,含有中文的str无法用ASCII编码,因为
    ##中文编码范围超过了ASCII的。在bytes中,无法显示为ASCII的字节,用x##表示,
    ##反过来,如果我们从网络或磁盘上读取了节节流,那么读的数据就是bytes。要把bytes转为str,yi
    ##需要用decode()方法
    ##x = b'ABC'.decode('ascii')
    ##print (x)#结果ABC,说明已经把字节的b'ABC'转化为str的'ABC'
    ##x = b'xe6x88x91xe7x88xb1xe5xa4xa7xe6xa0x91'.decode('utf-8')
    ##print (x) #我爱大树'
    
    ##len()用来计算str字符串的字符数,还可以来用计算bytes数据的字节数。
    ##print (len(b'ABC'))#3说明,一个bytes占用一个字节,而一个英文字符占用1个字节。一个中文占用3个字节
    ##print (len('ABC'))#3
    ##print (len(b'xe6x88x91xe7x88xb1xe5xa4xa7xe6xa0x91'))#12
    
    ##py源码也是文本文件,当源码中包含中文时,在保存源码时,就需要务必指定保存为utr-8可以在文件开头时写上
    ##   #!/usr/bin/env python3
    ##   #-*- coding:utf-8 -*-
    ##上面第一行是为了告诉Linux/osx系统,这是一个py可执行程序,在windows可以不用写,第二行是说用utf-8读取代码。
    
    ##py中的格式化,用%实现。
    ##strHi = 'hello,%s'%'world'#在前面字符串中的%s被后面%后的字符串替换。
    ##print (strHi)
    ##当要替换的内容比较多时,后面的%号用括号括起来,用,进行分隔。
    ##常见的点位符有:
    ##%d 整数
    ##%f 浮点数
    ##%s 字符串
    ##%x 16进制整数
    ##其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数。
    ##x = '%2d-%02d' % (3,1)
    ##print (x)# 3-01
    ##x = '%.2f' % 3.1415926
    ##print (x)#3.14
    ##当为了表示在字符中的一个普通的'%',可以用%%来进行转义,
    
    ##练习
    ##x = (85-72)/72*100
    ##print('小明的成绩提升了%.1f%%'%x) #小明的成绩提升了18.1%
    
    
    ##py中的list
    ##classmates = ['a','b','c','d','e']#用[]表示。
    ##x = len(classmates)#用len()函数可以得到list的长度,前面也可以得到str,bytes的长度,字节数量
    ##print(x)#5
    ##print(classmates[2])#可以得到指定位置上的元素c。
    ##print(classmates[len(classmates)-1])#list最后一个元素用len(list)-1来表示位置。
    ##print(classmates[-1])#e,也可能用-1来表示最后一个元素,同理[-2]表示最后第二个。
    ##classmates.append('f')#把f加到最后一个位置上
    ##classmates.insert(1,'0')#把0加入到索引为1的位置。
    ##classmates.pop()#删除最后一个元素。
    ##classmates.pop(3)#删除指定位置为3的元素。
    ##classmates[2] = 'k'#把索引位置为2的元素换为'k'
    ##print(classmates)
    ####list中也可以添加另一个list
    ##classmates.insert(1,[1,3,4])
    ##print(classmates)
    ##print(classmates[1])
    ##
    ##a = []
    ##print(len(a))#0,表示空的list
    
    ##tuple元组,有序列表,一旦初始化就不能修改,这样数据更安全,所以能用tuple不用list
    ##classmates = ('x','y','z')
    ##print(classmates[0])#'x'
    ###由于tuple不能被修改,所以list中的insert,pop,等一些修改,替换的方法在元组中都不能用。
    #当定义的为一个元素时
    ##t = (1)#这时与数据运算中()会有歧义,Py规定这时按数学运算记,t为1.而不是元组。可以改变。
    ##tupleDemo = ('1','23',[22,33])#表示一个元组里包含一个list,这时元组的元素还是不能改变,但是元组中的list
    #元素的内容是改变的,应该加以区分。
    
    ####练习
    ##L = [['apple','google','microsoft'],['java','py','puby','php'],['adam','bart','lisa']]
    ##print(L[0][0])
    ##print(L[1][1])
    ##print(L[2][2])
    
    
    ##条件判断:if,和java同,就不再详细记录主要是注意格式,缩进。
    ##if x :
    ##    print()
    ##elif y :
    ##    if l :
    ##        print()
    ##    elif m : 
    ##        print()
    ##    else :
    ##        print()
    ##else :
    ##    print()
    
    ##for循环,py中的for循环与java中的超级for循环类似,把要循环的对象分别赋值给变量。
    ##ziMu = ['a','b','c','d']
    ##for zi in ziMu :
    ##    print(zi) #a b c d
    ##range(i)生成一个从0到小于i的一个整数序列。
    ##sum = 0
    ##for ii in range(100):
    ##    sum = sum+ii
    ##print (sum)
    
    ##while循环
    ##while x:
    ##    print()
    ##    if l:
    ##        break
    
    ##dict全称是dictionary字典,在java中被称为map,有健值对。查找速度快,是能过健值查找,比list快。
    ##d = {'a':111,'b':222,'c':333,'d':444}
    ##d['a']#111.
    ###d[f]因为没有f这个健,所以会报错,因此可以用下面方法:
    ##if 'f' in d :
    ##    print(d['f'])
    ###或
    ##d.get('f')#当’f'不存在时,会返回None
    ###要删除一个key,用
    ##d.pop('c')#同时,'c'对应的value值也会被删除掉。
    
    ##list与dict相比,dict的特点:
    #1.查找与插入速度快,不会随着key的增加变慢。
    #2.要占用大量的内存,
    #list则查找与插入时间会随元素数量的增加而增加。但内存占用相对较少。
    
    #dict的key不能改变,不然得到的value的内存位置就会改变,value也会改变。因此作为key的类型为
    #不可以改变的类型,str,整型,但list不能作为key.
    
    ####set
    ###也是 组key的集合,但不存储value,像在dict中一样,key同样不能重复。要创建set,需要提供一个list作为
    ###输入集合
    ##s= set([1,2,3,4,5,3443])
    ##print(s)#{1, 2, 3, 4, 5, 3443},可以看到是大括号,list是[]。同时,set中的元素是无序的。
    ###set会自动过滤list中的重复元素。
    ##q = set([1,1,1,3,3,3,2,2,222222,5,5,])
    ##print(q)#{1, 2, 3, 5, 222222}可以看到,重复元素被过滤了,
    ##q.remove(222222)#
    ##print(q)#{1, 2, 3, 5}用remove(key)来删除一个key
    ###因为set中的元素不能重复,所以可以为两个序列取交集,并集操作。
    ##s1 = set([1,2,3])
    ##s2 = set([2,3,4])
    ###取交集
    ##print(s1 & s2)#{2, 3}
    ###取并集
    ##print(s1 | s2)#{1, 2, 3, 4}
    ###set与dict一样,不可以放入可变对象,因为无法判断两个可变对象是否相等。
    ###尝试把list放入set
    ###s1[0] = [1,2,3]#TypeError: 'set' object does not support item assignment
    ###print (s1[0])
    
    ###不可变对象:
    ###str是不可变对象,list是可变对象。
    ##a = ['b','a','d','e','c']
    ##a.sort()
    ##print(a)#['a', 'b', 'c', 'd', 'e'],a变成有序的了,说明内容可变。
    ##a = 'abc'
    ##a.replace('a','A')
    ##print (a)#abc,说明a没有变,但是没有变为是可以使用replace()方法呢。
    ##a = 'abc'
    ##b = a.replace('a','A')
    ##print(b)#Abc,可以理解为:a只是一个变量,指向一个内存地址,其中放着字符串'abc',a.replace('a','A')
    ###方法没有改变'abc',而是重新生成一个新的字符串'Abc',b指向了这个新的字符串,a还是指向'abc'
    
    
    ####函数
    ##x = -2
    ##abs(x)#求绝对值,当传入的参数的个数不对,会报Typeerror错误。
    ##y = 5
    ##max(x,y)
    
    ###数据类型转换
    ##print(int('123'))#123,把str类型的’123‘转换为整数123
    ##print(float('12.34'))#12.34
    ##print(str(12.34))#'12.34',
    ##print(bool(1))#True
    ##print(bool(''))#False
    ###像abs()函数中的abs函数名称实际是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于
    ###给函数起了个别名。
    ##a = abs
    ##print(a(-30))
    ##b = max
    ##print(b(18,80))
    
    ####练习
    ##print(str(hex(30)))#0x1e,把30转换成16进制表示的字符串。
    
    
    ####函数的定义
    ###Py中函数定义用def 函数名(参数):函数体,return 返回值
    ##def my_abs(x):
    ##    if x>=0:
    ##        return x
    ##    else :
    ##        return -x
    ##print(my_abs(-10))
    ###py中可以传入多个参数,并且有多个返回值。
    ##def manyData(a,b,c):
    ##    x = b+c
    ##    y = a+b
    ##    z = a+c
    ##    return x,y,z
    ##print(manyData(1,2,3))#返回的多个参数是以元组的形式返回的。
    ###return,当return后,函数就被结束了执行,当return None,返回就是为空,也可以写成return
    ###空函数:
    ###pass,当函数体为空时,可以用pass结束,返回为None,用pass语句什么都不做,点位符用。当还没有想
    ###想好函数体怎么写是,用pass.
    ##def getAge(age):
    ##    if age>=10:
    ##        pass
    ##getAge(13)
    ###当调用 一个函数时,传入的参数是一个错误的类型,或参数的个数不对时,就会报TypeError错误。
    ##def my_abs1 (x):
    ##    if not isinstance(x,(int,float)):
    ##        raise TypeError('bad operand type')
    ##    if x>=0:
    ##        return x
    ##    else :
    ##        return -x
    ####print(my_abs1('11'))#当传入的参数类型不正确时,就会报raise 后面的定义的错误。
    ##print(my_abs1(-11))
    
    
    ##函数的参数
    #位置参数
    def power(x,n):
        s = 1
        while n>0:
            s = s*x
            n = n-1
        return s
    print(power(12,3))#这里的x,n都是被指定好位置的,叫位置参数。调用时,要依次传入参数。
    
    #默认参数
    def moren(x,n = 3):
        s = x+n
        return s
    print (moren(1))#4,这里可以看到,函数定义了两个参数,但调用函数时,只传入了一个参数,n没有
    #传入参数值,但也没有报错,原函数里的 n=3就是默认参数,当不传入n的参数值时,就使用默认值,
    #而传入n的参数值时,就会使用传入的参数。
    print(moren(1,10))#11
    print(moren(3))
    #默认参数一般放在函数非默认参数的后面,默认参数一般为变化量不大的参数。
    #默认参数必须指向不变的对象,上面n = 3,是把n 指向3这个不变的数字。
    #当默认参数指向一个可变的对象时:
    def kebian(b = []):
        b.append('X')
        return b
    print(kebian())#['X']
    print(kebian())#['X', 'X'],可以看到,当默认参数指向一个可变对象时,执行同样语句,内容确
    #有变化,这是什么原因呢:因为变量b指向对象[]的引用地址,地址不会变,但[]中的内容是可变的,
    #当第一次执行参数时,[]list,内容就变成了['x'],再次执行时,就会往同一地址指定的[]中再加入一
    #次'x',这样就会导入不希望出来的结果。
    
    #可变参数
    def kebian(*nums):#接收时用'*'加一个变量名,表示接收可变参数。
        s = 0;
        for num in nums:
            s = s+num
        return s
    print(kebian(1,3,4,3,2,3,3))#可变参数就是用来表示参数个数不确定的函数。传入的参数,是由
    #list或tuple演变简写成这种样式的。
    

      

  • 相关阅读:
    AFNetworking 3.0迁移指南
    富文本常用封装(NSAttributedString浅析)
    如何在 Objective-C 的环境下实现 defer
    iOS之深入了解控制器View的加载
    10+年程序员总结的20+条经验教训
    Foundation: NSNotificationCenter
    做一款仿映客的直播App?看我就够了
    AFNetworking源码分析
    WWDC2016 Session笔记 – Xcode 8 Auto Layout新特性
    iOS页面间传值的一些方式总结
  • 原文地址:https://www.cnblogs.com/jww-love-study/p/5441362.html
Copyright © 2011-2022 走看看