Python笔记

2019-03-22  本文已影响0人  我好菜啊_

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

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

字符串

列表

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

条件判断

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

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

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

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

def make_pizza(*toppings):
print(toppings)

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

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

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了

Class ElectricDog(Dog):

def _init_(self, name, age, power):
    “””初始化父类属性”””
    super()._init_(name, age)
    self.power=power
Class Dog(object):

Class ElectricDog(Dog):
def _init_(self, name, age, power):
    super(ElectricDog, self)._init_(name, age)

文件

with open(‘pi_digits.txt’) as file_object:
contents=file_object.read()
print(content)

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

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)
with open(filepath) as file_object:
for line in file_object:
print(line)

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

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)

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()
上一篇下一篇

猜你喜欢

热点阅读