美文网首页
Python笔记

Python笔记

作者: 我好菜啊_ | 来源:发表于2019-03-22 21:07 被阅读0次

    主要是记录一些和C++里不一样的以及我不知道的

    变量的定义
    message=”hello, world!”

    字符串

    • 单引号,双引号都可以,这样就可以自由得在字符串中包含双引号单引号啦
    • message.title()会返回Hello, World!(原字符串并不改变)
      全部大写/小写.upper/lower()
    • +拼接
    • \t制表符,\n换行
    • 返回删除字符串末尾/开头/开头与末尾的多余空白后的字符串:.rstrip()/.lstrip()/.strip()(常用于在存储用户输入前对其进行清理)
    • 像matlab一样终端可以当计算器用,按回车输出结果
    • 2^3要写成2**3
    • 转为字符串str(23)
    • 判断一个字符串是否是另一个字符串的子串可以直接
      if a in b:

    列表

    • 在列表中添加元素
      xxs.append(x)
    • 插入元素
      xxs.insert(0, x)
    • 删除元素
      del xxs[0]
    • 删除的同时获取
      x=xxs.pop(0) #不写参数的时候就是默认删去最后一个元素
    • 根据值删除
      xxs.remove(x)
      注:如果x有重复的remove只删去第一个,可以配合循环来使用
      永久性排序
    • xxs.sort()
      xxs.sort(reverse=True)
    • 临时性排序
      sorted(xxs)
      sorted(xxs, reverse=True)
    • 反转
      xxs.reverse()
    • 长度
      len(xxs)
    • 创建数值列表
      digits=list(range(2, 11, 2))->[2, 4, 6, 8, 10]
      min(digits)/max/sum
    • 列表解析将for循环和创建新元素的代码合成一行,并自动附加新元素
      squares=[value**2 for value in range(1, 11)]
    • 切片
      digits[0:3]==digits[:3]
      digits[-3:]
    • 复制列表
      digits2=digits[:]
      digits2=digits(这样不行,这样只是让digits2关联到包含在digits中的列表)
    • 根据一个字符串创建单词列表
      string.split()

    元组
    不可变列表
    dimensions=(200, 50)
    虽然元组内的元素不可以修改但可以给存储元组的变量重新赋值

    条件判断

    • if a>b and a>c:
    • if a>b or a<c:
    • if x in xxs:
    • if x not in xxs:
    • if-elif-elif(-else)
    • 确定列表是否为空
      if xxs:

    字典(无序)
    alien_0={‘color’: ‘good’, ‘points’: 5}
    print(alien[‘color’])

    • 添加键值对
      alien_0[‘x_position’]=0
    • 创建空字典
      alien_0={}
    • 修改字典中的值
      alien_0[‘color’]=’yellow’
    • 删除键值对
      del alien_0[‘points’]
    • 遍历所有键值对
      for k, v in user_0.items():
    • 遍历所有键
      for k in user_0.keys():/for k in user_0:
      .keys()方法返回一个列表
      if k1 not in user_0.keys():
    • 按顺序遍历字典中的所有键
      for k in sorted(user_0.keys()):
    • 遍历所有值
      for v in user_0.values():
      返回所有值组成的列表
    • 剔除重复元素
      for v in set(user_0.values())
    • 字典可以作为列表的元素
      列表也可以作为字典的值
      字典也可以作为字典的值
    • 记录了键值对顺序的字典
      from collections import OrderedDict
      my_dict=OrderedDict()

    输入
    message=input(‘please input your name:’)
    注意返回的是字符串,可以用int()转为数字
    注意python2中是raw_input(如果用input的话用户输入会被视为python代码并被执行)

    while循环
    while n<5:
    也可以用break, continue

    函数
    def 函数名(参数):
    “””文档字符串””” python会用这个生成程序中函数的文档

    • 传递实参的多种方式
      human(‘alice”, 18)
      human(name=’alice’, age=18)
      也可以在编写函数的时候给形参指定默认值
      注意在形参列表中必须先列出没有默认值的形参

    • 注意在函数中对传过去的参数进行修改的话参数本身是会被改变的,这跟c++不一样
      (所有类型的参数还是只有列表?)

    • 禁止函数修改列表
      function_name(list_name[:])切片表示法创建副本还挺耗时的非必要的时候尽量不用

    • 传递任意数量的实参
      预先不知道要接收多少个实参的情况,python允许函数从调用语句中收集任意数量的实参

    def make_pizza(*toppings):
    print(toppings)
    

    make_pizza(‘pepperoni’)
    make_pizza(‘mushrooms’, ‘green pepper’, ‘extra chess’)
    *让python创建一个空元组,并将收到的所有值都封装到这个元组中
    注意这种类型的形参应该放在最后
    def make_pizza(size, *toppings):

    • 接收任意数量的实参,且预先不知道传递给函数的是代表什么的信息
      传递任意数量的键值对
      def build_profile(first, last, **user_info):

    build_profile(‘albert’, ‘einstein’, location=’princeton’, filed=’physics’)
    **让python创建一个空字典

    • 将函数存储在模块中
      模块是名为.py的文件
      比如pizza.py
      同一个文件夹下
      import pizza
      pizza.make_pizza()
      导入特定函数
      from module_name import function_name1, function_name2
      调用时直接function_name()
      指定别名
      from pizza import make_pizza as mp
      mp()
      模块也可以指定别名
      导入模块中所有函数,这样也是直接用函数名来调用的(使用非自己编写的大型模块使最好别这样,容易重名)
      from module_name import *

    class Dog():
    “””模拟小狗”””
    def _init_(self, name, age):
        self.name=name
        self.age=age
    
    def sit(self):
        print(self.name.title()+” is now sitting.”)
    
    def roll_over(self):
        print(self.name.title()+” rolled over!”)
    

    每当根据Dog类来创建新实例时,都会自动运行_init_()
    _init_的形参中self必不可少且位于最前面创建实例时自动传入,它是指向实例本身的引用
    self为前缀的变量可以被类的所有方法使用
    python2中,class ClassName(object),这样类的行为就会比较像python3了

    • 创建实例
      my_dog=Dog(‘willie’, 6)

    • 继承

    Class ElectricDog(Dog):
    
    def _init_(self, name, age, power):
        “””初始化父类属性”””
        super()._init_(name, age)
        self.power=power
    
    • python2中的继承
    Class Dog(object):
    
    Class ElectricDog(Dog):
    def _init_(self, name, age, power):
        super(ElectricDog, self)._init_(name, age)
    
    • 重写父类的方法
      直接同名函数覆盖就行

    • 类也可以保存在模块中dog.py使用方法和上面的把函数存在模块里一样
      from dog import Dog

    文件

    • 读取整个文件
      pi_digits.txt与使用它的.py文件在同一个目录下
    with open(‘pi_digits.txt’) as file_object:
    contents=file_object.read()
    print(content)
    

    关键字with会在不需要访问文件后将其关闭(如果使用close()来关闭的话,可能会出现程序在执行close语句前出了bug文件关不了的情况)
    read()到达文件末尾时返回一个空字符串,会在原文件末尾多一个空行(要删除空行可使用rstrip()

    • 文件路径
      不在同一个目录下的时候要提供路径
      1.相对于当前运行的程序所在目录
      比如程序在python_work中,文件在python_work的子文件text_files中
      Linux/OS X
      open(‘text_files/filename.txt’)
      Win
      open(‘text_files\filename.txt’)
      2.绝对路径
      Linux/OS X
    file_path=’/home/ehmatthes/other_files/text_files/filename.txt’
    open(file_path)
    

    Win

    file_path=r’C:\Users\ehmatthes\other_files\text_files\filename.txt’
    (因为\在python中是转义标记所以要加上r使其变成原始字符串)
    open(file_path)
    
    • 逐行读取
      以每次一行的方式检查文件可对文件对象使用for循环
    with open(filepath) as file_object:
    for line in file_object:
    print(line)
    

    不过这样每行后面都会多一个空行

    • 创建一个包含文件各行内容的列表
      (使用with关键字的时候文件对象file_object只在with代码块中可用)
    with open(filepath) as file_object:
    lines=file_object.readlines()
    
    • 写入文件
    with open(‘filename.txt’, ‘w’) as file_object:
    file_object.write(“I love programming”)
    

    ‘w’写入模式,若文件不存在会自动创建,若存在会将原文件清空再返回
    ‘r’读取模式,默认
    ‘a’附加模式,若文件不存在会自动创建,若存在会在原文件的末尾开始写
    ‘r+’读写模式
    只能将字符串写入文本文件,其它数据格式要用str进行转换

    异常
    python使用被称为异常的特殊对象来管理程序执行期间发生的错误
    发生错误时会创建一个异常对象,如果有处理该异常的代码程序(try-except)就可以继续执行否则就会停止并显示一个traceback

    try:
    print(5/0)
    except ZeroDivisionError:
    print(“You can’t divide by zero”)
    

    这样遇到ZeroDivisionError的时候就会打印这句话而不是出现traceback
    然后程序会继续执行

    try:
    answer=int(first_num)/int(second_num)
    except ZeroDivisionError:
    print(“You can’t divide by zero”)
    else:
    print(answer)
    

    FileNotFoundError
    ValueError
    也可以在except中使用pass

    使用json模块来存储数据(不局限于字符串,各种数据结构都可以)

    import json
    numbers=[2, 3, 5, 7, 11, 13]
    filepath=’number.json’
    with open(filepath, ‘w’) as f_obj:
    json.dump(numbers, f_obj)
    

    读取数据

    with open(filepath) as f_obj:
    numbers=json.load(f_obj)
    

    示例:

    import json
    
    filepath=’username.json’
    try:
        with open(filepath) as f_obj:
        username=json.load(f_obj)
    except FileNotFoundError:
        username=input(“What is your name?”)
        with open(filepath, ‘w’) as f_obj:
            json.dump(username, f_obj)
    else:
        print(“Welcome back, “+username)
    

    使用Python模块unittest中的工具来测试代码
    自动执行,并使用断言来判断执行得是否正确
    单元测试用于核实函数的某个方面没有问题
    测试用例是一组单元测试,核实函数在各种情形下都没问题
    全覆盖式测试用例

    • 测试函数
    import unittest
    from name_function import get_formatted_name
    
    class NamesTestCase(unittest.TestCase):
        “””测试name_function.py(创建了一个测试用例)”””
    
        def test_first_last_name(self):
            “””能正确处理像Janis Joplin这样的名字吗(创建一个单元测试用于测试某一方面)”””
            formatted_name=get_formatted_name(‘janis’, ‘joplin’)
            self.assertEqual(formatted_name, ‘Janis Joplin’)
    
        def test_first_last_middle_name(self):
            “””测试另一种情况”””
            formatted_name=get_formatted_name  (‘wolfgang’, ‘mozart’, ‘amadeus’)
            self.assertEqual(formatted_name, ‘Wolfgang Amadeus Mozart’)
    
    unittest.main()
    

    运行这个文件时,所有test_开头的方法都会被自动运行
    用断言方法来核实结果是否与期望的结果一致
    assertEqual(a, b)
    assertNotEqual(a, b)
    assertTrue(x)
    assertFalse(x)
    assertIn(item, list)
    assertNotIn(item, list)

    • 测试类
      survey.py
    class AnonymousSurvey():
    
    def _init_(self, question):
        self.question=question
        self.responses=[]
    
    def show_question(self):
        print(self.question)
        
    def store_response(self, new_response):
        self.responses.append(new_response)
    
    def show_results(self):
            print(“Survey results:”)
            for response in self.responses:
                print(‘- ‘+response)
    
    
    

    test_survey.py

    import unittest
    from survey import AnonymousSurvey
    
    class TestAnonymousSurvey(unittest.TestCase):
        def test_store_single_response(self):
            question=”What language did you first learn to speak?”
            my_survey=AnonymousSurvey(question)
            my_survey.store_response(‘English’)
            self.assertIn(‘English’, my_survey.responses)
    
    unittest.main()
    

    不用在每个方法中都创建实例,可以使用unittest.TestCase类中的setUp方法,只需创建实例一次并在每个测试方法中使用
    setUp方法在test_方法之前调用

    import unittest
    from survey import AnonymousSurvey
    
    class TestAnonymousSurvey(unittest.TestCase):
        def setUp(self):
            question=”What language did you first learn to speak?”
            self.my_survey=AnonymousSurvey(question)
            self.responses=[‘English’, ‘Spanish’, ‘Mandarin’]
    
        def test_store_single_response(self):
            self.my_survey.store_response(self.responses[0])
            self.assertIn(self.responses[0], self.my_survey.responses)
    
        def test_store_three_responses(self):
            for response in self.responses:
                self.my_survey.store_response(response)
            for response in self.responses:
                self.assertIn(response, self.my_survey.responses)
    
    unittest.main()
    

    相关文章

      网友评论

          本文标题:Python笔记

          本文链接:https://www.haomeiwen.com/subject/odcdvqtx.html