美文网首页
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