《Python编程:从入门到实践》学习汇总

Pycharm使用方法:
    Debug:  开始Debug:shift+F9
            Debug到下一个断点:F9或F8
            停止:Ctrl+F2
            查看调试时的变量信息看下方信息栏的Debugger;查看输出看Console

Python编程:从入门到实践
    python对于一个变量名并不作固定的数据类型绑定,当存入数据形式为字符串时,它就是一个字符串,当存入一个int时,它就是一
        int,而再放入一个字符串/列表/集合时,它又变成了一个字符串
    Python中的变量(包括字符串)拷贝存储方式与c相同,但直接在列表,元组,字典间赋值时要注意了,默认为浅拷贝
    通用函数:
        list(?)         转化为一个列表
        str(int num)    返回值为和num相同的字符串
        sorted(iterable) 对iterable列表排序,但对原列表不作任何改变,会返回排序后的列表
        len(iterable)   获取iterable列表的长度,返回值即为其长度
        max/min(iterable) 返回列表中元素的最大值/最小值
        sum(iterable)   返回列表中元素的值的总和
        set(list)       将列表转化为集合
        raw_input('str')    先输出str作提示信息,再进行输入操作,返回值为输入内容所表示的字符串
        int('str')      将str所表示的内容转换成int类型的数据



Python 笔记
1.
    1.2
        1.2
            字符串的加法,减法
        1.2.3
            字符串的切片(str[0:3])(str[-3:-1])
        1.2.4
            字符串高级方法(类似字符串对象内的函数)
                标题大写:   .title()    str.title()     将每个空白字符的后面的字符换成大写
                大小写:    .upper(),.lower()       全部切换成大写或小写
                切割\分离:     .spilt()    str.spilt('分隔符')  返回值是一个一维字符串的列表,字符数组的行数取决于字符串被分拆成了几段;
                                                        分隔符可以是单个字符,也可以是一个字符串
                替换:     .replace()  str.spilt('str_before','str_after') 返回值为以为字符数组
                去两端空字符:     .strip()    str1.strip('str2')    返回值为字符串,其中会除去str1中所有str2含有的字符,如果不加参数str2,
                                                        则自动去除str2两边的空格字符
                .lstrip()/.rstrip()   str1.lstrip/strip('str1')  返回值也为字符串,和上面基本相同,但只会去掉开头的/末尾的
                查找:     (str1 in str2/iterable2)    返回值为一个布尔值,常用在选择结构中

                .formate()  str1.formate('str2')    将str1中的所有{ }替换为str2,返回值为替换后的字符串

                list1=list2     则将list2的地址赋予list1,只进行浅拷贝
                list1=list[:]   则新生成一个列表,进行深拷贝
                //////////
                随机讲的野生函数
                    print()         类似c++中的cout<<,可以直接输出字符串(不管几维)和数字,后面自动接了一个换行符

                    range(a,b)  表示从a到b的list(官方语言为集合),从a开始小于b
                    len(list1)  返回list1的长度
                    zip(list1,list2...) 提供list1和list2中元素的一对一映射集合,放在另一个地方,返回值为其地址,若对所得
                                    地址再用一次zip,则返回n个值,分别是之前的各个list;
                //////////
    1.3结构
        1.3.1
            1. 函数,注意print会(返回并[可能错了])输出,而return 只会返回;并且,print并不是函数的终点,只有return才是函数的终点
            定义格式:
            def function_name(parameter):
                '''something to describe the function'''
                function_content
                return something
            2.  Python传参也可以使用默认参数(这里叫参数默认值),不过仍然要把有默认参数的放在最后面.
                    Python传参方式默认方式: 对变量(包括字符串)默认是值传递,对列表之类的默认是地址传值(也算是值传递)
            3.传递任意数量的实参:
                传一个元组:多个单参数
                   def function(*parameter):
                      '''这样定义参数列表后,函数会将任意数量的参数装入一个元组,该元组的名字就是形参的名字)'''
                      '''若这种方法和单个数的形参一起使用,应该将任意数量的放后面,这样Python会先匹配单参数'''
                      '''如果和带默认值的参数混用,python会先填满带默认值的参数'''
                      balabala
                      return something
                传一个字典:多个键-值对:
                   def function(**parameter):
                      '''调用方式:示例:function(key1=value1,key2=value2,key3=value2)'''
                      '''会生成一个字典,填满'''
                      balabala
                   return
            4. python传参新方式:
                关键词传参:
                    例:在函数中定义的形参列表为:(animal_name,animal_type);调用参数时,可以将实参列表写为(animal_type=
                        hamster,animal_name=niko);python 会自动匹配好参数。
            5.  import关键字
                Python中的import机制:
                    import语句:
                        方式1:    [from \\\filename] import function_name1 [as new_function_name],function_name2(这样就
                                    能值引入某个文件中的某个特定函数)
                        说明: 1.[]表示是可选的,如果不加,就代表从当前目录引入头文件
                              2.from后面,一个点代表上一层目录,几个点代表几层,因此还有2层,3层....
                              3.当然还可以继续加具体的路径值,如:..\ProgramData\Microsoft\Windows\Start Menu
                              4.as就是作为的意思,那么在这个文件中使用as的名字时,就用了它原来的名字的函数
                              5.可以写成[from \\\filename] import *,导入该文件中的所有函数
                        方式2:    [from \\\filename的父文件夹] import filename1 [as new_filename1],filename2
                              1.1.[]表示是可选的,如果不加,就代表从当前目录引入头文件
                              2.from后面,一个点代表上一层目录,几个点代表几层,因此还有2层,3层....
                              3.当然还可以继续加具体的路径值,如:..\ProgramData\Microsoft\Windows\Start Menu
                              4.as就是作为的意思,那么在这个文件中使用as的名字时,就用了它原来的名字的文件
                    import对类的导入:与上述相同,把函数名改成类名
                    import之后的使用:
                        如果是filename里的function函数,则用filename.function(参数列表)调用
            6.Python之禅之函数
                应在定义每个函数之后写好关于这个函数的注释
                如果参数太多,勇敢地换行
                除开头写了注释外,import都尽量写开头           if flag:
                balabala
            [else:
                balabala]
             and相当于&& or相当于||
             新逻辑运算符:   in和not in
             (item in iterable)相当于[在iterable中存在/找得到item]

             布尔数据类型:定义变量时赋值True或false即可
        1.3.3
             for item in iterable:
                do
             item在iterable中一次变换,执行do
             例如 for i in range(0,10)
             print(i)
             就是输出0~10
             关键字 continue 和 break
             可以直接用iterable名的值表示其是否为空545
    1.4
        1.4.1列表
            乘方运算符**
            列表:names=['a','b','c','d','e'];
            追加函数:   names.append(str)  相当与names.pushback(),在尾部增加一个字符串
            插入函数:   names.insert(n,element) 在names[n-1]和names[n]之间插入element
            删除函数:   names.pop(n)    除去names[n],如果没有指定n,则除去最后一个元素;
                                        返回值为弹出的元素
                        names.remove(element)   找出names中第一个完全和element相同的元素,将其除去(是否还有相同的就不管
                        了);无返回值
                        del||||这是一个关键字||||| names[n]
            拼接函数:   names.extend(list2) 在names的后面接上list2的所有元素
            清空:       names.clear()
            排序:       names.sort()  字典序排序,会改变names列表的顺序
                        names.sort(reverse=True) 字典序倒序排序
            反转:       names.reverse() 将原列表反转
            查找函数:   names.index(element)  找出names中第一次出现的和element相同的元素的下标
            统计次数:   names.count()
            列表解析:   squares = [value**2 for value in range(1,11)]

            多重循环:   python: for i,j in zip(list1,list2)
                        c++   : for(int item1=list1[0],item2=list2[0],i=0;
                               i<list1.length()&&i<list2.length();
                               i++,item1=list[i],item2=list[i])
            高级应用:urls=['balbala{}'.format(number) for number in range(1,16)]
                        可见for item in list 不止能用在循环结构语句中,对与所有需要列举的地方,都可以使用,非常灵活.
        1.4.2   字典
            字典就是map,基本使用方式和map一样,不同的是,不需要模板,因此键与值的类型没必要统一
            创建方法
                map={'one'=1,'two'=2,'three'=3}
                map={'one':1,'two':2,'three':3}

            使用方法
                if key in map.keys:  #这里的条件语句是为了避免key不在map里,不然,就会报错
                    print map[key]
                print "three is %(three)s." %d
                    使用:map.get(key) 如果key不存在,则返回none,否则,返回其对应值
                          map[key]
                    删除:map.pop(key)
                    遍历:for key,value in map.items():
                          for key in map.keys():
                          for value in map.values():
        1.4.3   元组和集合--通过《Python编程:从入门到实践》学习
            1.4.3.1 元组(虚拟)
                    元组整体性的list,基本特性和list一样。区别是:不能对其内部元素进行任何修改,但仍可访问内部元素,要修
                    改只能进行整体修改(也就是赋值,重新定义),list对象的函数对元组(dimension)对象基本可用(除了是修改元
                    素的)
                    定义方法: dimensions=(200,50)
            1.4.3.2 集合(set)
                    集合类似不允许重复的list
            1.4.4   混合嵌套
                    注意:python的各种东西经常都是浅拷贝,包括嵌套的时候,要熟悉copy.deepcopy()的用法

    1.5
        1.5.1 打开文件
            open(name,mode,buffering)   name示例,
    Python编程第9章:类(面向对象)
        格式:
            class class_name(继承的类(这里用f表示父类)):
                '''注释'''
                def function():
                    return something
        Python 的类中没有数据成员,如果需要,就在写的__init__函数中新定义名称
        Python 的类定义中每次都需要用self表示成员函数要引用的对象名
        在定义该类时可以用方法super.表示对父类的引用,用super.function1相当于调用了f的function1
        猜想:可能调用父类的函数直接调用即可
        [super(f,self).__init__()]
        如果需要去除掉父类中不需要的方法,只用在子类中对该方法重写,名称完全相同即可
        不要忘记了类可以包含(不是说什么继承机制),电动车类里可以含有一个电池的类,并且这个类可以直接用一个语句来实例化(
            self.battery=Battery()
        写代码的另一境界:从显示的逻辑层面考虑问题;考虑的不是Python而是显示情况是怎样的逻辑模型,怎样用代码来表示它

        Python的高级模板:
            1.有序字典(只是给加入的键值(按加入顺序)编了一个序号,在遍历时按该顺序遍历)
                文件: collections.py
                函数名:OrderedDict
                定义方法:m=OrderedDict()
                说明:创建了一个空的有序字典m,遍历的时候先进先出
            2.随机数
                文件: random.py
                函数名:randint
                使用:num=randint(a,b)
                说明:产生从a到b的(伪)随机数,闭区间

        驼峰命名法:
            类名首字母大写,实例(对象)名小写,单词间大写区分
            模块名小写,单词间下划线
            每个类,要一个说明字符串;每个文档,说明字符串;
            一个空行分隔类的方法,两个空行分隔类;
            先导入标准模板,再导入自定义模板,中间用空行隔开;o'k
    Python编程第10章:
        10.1读取文件
            格式1:with open(filename1) [as name1]
                    balabala
            格式2:open (filename2) [as name1]
                    balba
                  close(filename2)
            区别:前面的一种会自ko动找到合适的时机关闭文件,后者要手动调用close()函数
            补充:
                对于filename中转义字符'\'的冲突,有两种解决方案
                    1:在单引号或者双引号的前面加上r,表示'\'表示的时该字符,而不是转义
                    2.像C\C++一样 用'\\'表示
                    3.类函数:
                        举例:
                            str1=name1.read()
                        作用:将文件指针所致文件的全部内容读取到一个字符串中

            逐行读取:
                with open(filename1) [as name1]
                    for line in name1:
                        print(line)
            readlines()方法(类函数):这是文件指针的类的函数,功能为读取文件中的每一行,将各行储存到一个列表中,返回值就是
            这个列表
        10.2写入文件
            with open(filename ,'w') as file3:
                file3.write(str1)
             关于这个写入字符串的函数,以及'w','a','r'就不赘述,不写默认是'r'
             写入的时候自己加换行符
        10.3异常(排除)处理
            格式:
            格式1:
                try:
                     print(5/0)
                except ZeroDivisionError:
                     print("You can't divide by zero")
                这样做之后,在和它同文件夹的文件中遇到try代码中的错误时(不用具体的操作相同,只要系统将他们识别为认定的错误
                    类型),就不会运行上面的,而是运行下面的代码
            格式2:写成类似if结构
                try:
                     print(5/0)
                except ZeroDivisionError:
                     print("You can't divide by zero")
                只不过这样要放在直接运行的程序中,像一个if结构一样
            补充--常见错误类型:
                1.ZeroDivisionError
                2.FileNotFoundError  找不到文件
                3.ValueError    将字符串转换成整型或者浮点数据时,字符串中含有文本
            pass语句:     pass语句是一个空语句,在这个语句中什么也不做,但可以作为一个以后可能需要填充代码的标志
    Python编程第11章:测试
        11.1测试函数
            格式:
                import unittest
                from name_function import get_formatted_name
                class NamesTestCase(unittest.TestCase):
                   '''测试name_function.py'''
                   def test_firt_last_name(self):
                      '''能够正确处理像Janis Joplin这样的姓名吗'''
                      formatted_name=get_formatted_name('janis','joplin')
                      self.assertEqual(formatted_name,'Janis Joplin')
                unittest.main()
            说明:1.   测试原理是建立unittest.TestCase的派生类,每一个派生类都是一个测试实例
                        Traceback会显示每一个测试-测试中的函数是否通过;每一个测试实例可以包含多项检查,每个检查写成一个
                        检查函数,
                        检查的方法为使用类函数self.assetEqual(parameter1,parameter),函数会自动反映(而不是返回)两个参
                        数相等的逻辑值到类中,最后返回在Traceback
                 2.   编写的每一个测试实例和测试函数中都必须包含test字样,只有包含test字样unittest类才会检查它
                 3.     unittest Module中的更多断言方法
                        assertEqual(a,b)
                        assertNotEqual(a,b)
                        assertTrue(a)
                        assertFalse(a)
                        assertIn(item,list)
                        assertNotIn(item,list)
                        至于这些断言方法的功能和用法,自己看名字就知道了
                 4.     测试类的方法和测试函数的方法差不多,但编写测试类的代码时心里一定要有这个类,现在这个类处在一个怎
                        样的状态,然后一步一步地调用类函数,最后用以上断言方法检查
                 5.     关于unittest.TestCase的类函数setup()
                            setUp()函数可以写进自己编写的测试实例(类)中,setUp()函数一般专门用来生成测试数据,这组测试数据
                            经常被接下来的各种测试使用(都用这个),
                            setUp()函数的特点,在进行测试时,unittest会先看有没有setUp函数,如果有,则先运行它(生成测试
                            数据);如果没有,就会运行其他以test开头的函数(我也不知道顺序)

猜你喜欢

转载自blog.csdn.net/qq_41046771/article/details/80084528
今日推荐