Python学习笔记(三)日常细节记录

1.Python 是一门解释型语言,因为无需编译和链接
2.Python 让程序编写的紧凑和可读(

  • 高级数据结构使你可以在一条语句中表达复杂的操作;
  • 语句组使用缩进代替开始和结束大括号来组织;
  • 变量或参数无需声明。)
    3.Python 是可扩展的
    4.Python 源文件是默认是 UTF-8 编码
    5.除法(/)永远返回一个浮点数
    6.除法(/)永远返回一个浮点数。如要使用 floor 除法 并且得到整数结果(丢掉任何小数部分),你可以使用 // 运算符;要计算余数你可以使用 %
    7.通过 Python,还可以使用 ** 运算符计算幂乘方
    8.浮点数有完整的支持;整数和浮点数的混合计算中,整数会被转换为浮点数:
    9.大多数的小数不能用二进制精确的表示,其结果就是,所有十进制小数在计算机中都是用其最最近似的方式存储表示的。虽然python能很好地支持浮点数运算,但是python中浮点数是用二进制分数进行表示的。以上代码中得浮点数是由十进制分数表示,因此在其转换为二进制分数时面临着尾数上的截断误差。
    10.与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28个位置),可以与给定问题所需的一样大:

from decimal import *
getcontext().prec = 6
Decimal(1) / Decimal(7)
Decimal(‘0.142857’)

getcontext().prec = 28
Decimal(1) / Decimal(7)
Decimal(‘0.1428571428571428571428571429’)
11.>>> getcontext()
Context(prec=6, rounding=ROUND_DOWN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[InvalidOperation, Inexact, FloatOperation, Rounded], traps=[InvalidOperation, DivisionByZero, FloatOperation, Overflow])
12.Decimal(2).sqrt()/ Decimal(1).exp()/ Decimal(‘10’).log10()等,Decimal也可以使用一些数学函数。
13.如上所示,该getcontext()函数访问当前上下文并允许更改设置。这种方法满足大多数应用程序的需求。
对于更高级的工作,使用Context()构造函数创建备用上下文可能很有用。要使备用激活,请使用该setcontext() 功能;该decimal模块提供两种准备使用标准的上下文,BasicContext和ExtendedContext。前者对调试特别有用,因为许多陷阱都已启用,后者未启用任何陷阱。

14.大多数程序仅在程序开始时调整当前上下文一次。并且,在许多应用程序中,数据Decimal在循环内转换为单个强制转换。通过创建上下文集和小数,程序的大部分操作数据与使用其他Python数字类型的操作没有区别。

15.交互模式中,最近一个表达式的值赋给变量 “”,此变量对于用户是只读的。不要尝试给它赋值 —— 你只会创建一个独立的同名局部变量,它屏蔽了系统内置变量的魔术效果。(如果赋值后“”的值不再等于上一个的表达式的值)
16.除了 int 和 float,Python 还支持其它数字类型,例如 Decimal 和 Fraction。Python 还内建支持 复数 ,使用后缀 j 或 J 表示虚数部分(例如,3+5j)。
17.算术对十进制对象和算术对整数和浮点数有一些小的差别。当余数运算符%应用于Decimal对象时,结果的符号是 被除数的符号,而不是除数的符号:
18.quantize()方法舍入到固定的小数位数,Decimal(‘3.214’).quantize(Decimal(‘0.01’)),结果为Decimal(‘3.21’),相当于保留两位小说
19.问:有很多方法可以表达相同的价值。数字200, 200.000和2E2,02E+4在各种精度下都具有相同的值。有没有办法将它们转换为单一可识别的规范值?

答:该normalize()方法将所有等效值映射到单个代表:

values = map(Decimal, ‘200 200.000 2E2 .02E+4’.split())
[v.normalize() for v in values]
[Decimal(‘2E+2’), Decimal(‘2E+2’), Decimal(‘2E+2’), Decimal(‘2E+2’)]
20.dir(getcontext()) : dir列出当前类的方法
21.Python math 模块提供了许多对浮点数的数学运算函数。
Python cmath 模块包含了一些用于复数运算的函数。
cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。要使用 math 或 cmath 函数必须先导入:import math / cmath
22.由于 python3 包括python2.7 以后的round策略使用的是decimal.ROUND_HALF_EVEN
即Round to nearest with ties going to nearest even integer. 也就是只有在整数部分是奇数的时候, 小数部分才逢5进1; 偶数时逢5舍去。 这有利于更好地保证数据的精确性, 并在实验数据处理中广为使用。
但如果一定要decimal.ROUND_05UP 即Round away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise round towards zero. 也就是逢5必进1需要设置float为decimal.Decimal, 然后修改decimal的上下文


原文:https://blog.csdn.net/minghu9/article/details/52862262
23.decimal 保存具有用户可定义精度的浮点数
24.复数具有实部和虚部,每个都是浮点数。要从复数z中提取这些部分,请使用z.real和z.imag。

25.Python完全支持混合算术:当二进制算术运算符具有不同数值类型的操作数时,具有“较窄”类型的操作数被扩展为另一个的操作数,其中整数比浮点更窄,这比复数更窄。混合类型数字之间的比较使用相同的规则。[2]构造函数int(),float()和, complex()可用于生成特定类型的数字。

  1. c = 1 + 2j
    d = 10
    c.conjugate()
    (1-2j)

    d.conjugate()
    10

    共轭数

27.divmod(x, y) 这对 (x // y, x % y),例如divmod(10,5) 值为 (2, 0)
28.pow(2,3) == 8.0, 2 ** 3 == 8
29.x << n 、x >> n 表示左移或者右移n位(转换成二进制在左边或者右边补0)如2<<1, 00000010 -> 00000100,结果为4
30.负移位计数是非法的并导致ValueError提升。
左移n位相当于 没有溢出检查的乘法。pow(2, n)
右移n位相当于没有溢出检查的除法。pow(2, n)
使用有限二进制补码表示中的至少一个额外符号扩展位(工作位宽度或更大)执行这些计算 足以获得与无限数量的符号位相同的结果。1 + max(x.bit_length(), y.bit_length())
31.bin(n) / hex(n) / oct(n)将数字转换为对应得进制的数
32.

lists = [1] * 3
lists
[1, 1, 1]

lists = [[‘a’]] * 3
lists
[[‘a’], [‘a’], [‘a’]]

lists[0].append(2)
lists
[[‘a’, 2], [‘a’, 2], [‘a’, 2]]

lists[1].append(3)
lists
[[‘a’, 2, 3], [‘a’, 2, 3], [‘a’, 2, 3]]
说明:1. n小于的值0被视为0(其产生与s相同类型的空序列)。请注意,序列s 中的项目不会被复制; 它们被多次引用。这常常困扰着新的Python程序员; 考虑:
2.发生的事情是[[]]包含空列表的单元素列表,因此所有三个元素都是对这个空列表的引用。修改任何元素都会修改此单个列表。您可以通过以下方式创建不同列表的列表:[[]] * 3lists ,如下:

lists = [[] for i in range(3)]
lists[0].append(3)
lists[1].append(5)
lists[2].append(7)
lists
[[3], [5], [7]]
33.除法(/)永远返回一个浮点数。如要使用 floor 除法 并且得到整数结果(丢掉任何小数部分),你可以使用 // 运算符;要计算余数你可以使用 %

-2 % 3
1

-2 % 4
2

-2 % 5
3

-2 % 6
4

-2 % 20
18
35.math.gcd(a,b)求a与b的最大公约数
36.fractions- 有理数, raction实例可以由一对整数,另一个有理数或一个字符串构成。
class fractions.Fraction(numerator = 0,denominator = 1 )
class fractions.Fraction(other_fraction )
class fractions.Fraction(float )
类fractions.Fraction(十进制)
class fractions.Fraction(字符串)
numerator
最低分数的分数分子。

denominator
最低分数的分数分母。
37.因为 ** 的优先级高于 -,所以 -32 将解释为 -(32) 且结果为 -9。为了避免这点并得到 9,你可以使用 (-3)**2
38.abs(x)返回数字的绝对值。参数可以是整数或浮点数。如果参数是复数,则返回其大小。
39.not优先级低于非布尔运算符
40.注意 因为dir()它主要是为了方便在交互式提示中使用而提供的,所以它试图提供一组有趣的名称,而不是尝试提供严格或一致定义的名称集,并且其详细行为可能会在不同版本之间发生变化。例如,当参数是类时,元类属性不在结果列表中。
41.lambda argument_list: expression, lambda表达式,这里的argument_list是参数列表。它的结构与Python中函数(function)的参数列表是一样的,这里的expression是一个关于参数的表达式。表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。这里的lambda argument_list: expression表示的是一个函数。这个函数叫做lambda函数。lambda函数有如下特性:

lambda函数是匿名的:所谓匿名函数,通俗地说就是没有名字的函数。lambda函数没有名字。

lambda函数有输入和输出:输入是传入到参数列表argument_list的值,输出是根据表达式expression计算得到的值。

lambda函数一般功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。
四个用法:(1)将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
(2)将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。例如屏蔽标准库time中的sleep函数,time.sleep=lambda x:None。
(3)将lambda函数作为其他函数的返回值,返回给调用者。
(4)将lambda函数作为参数传递给其他函数。部分Python内置函数接收函数作为参数。典型的此类内置函数有这些。

filter函数。此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。

sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。

map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。

reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: ‘{}, {}’.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是’1, 2, 3, 4, 5, 6, 7, 8, 9’。

另外,部分Python库函数也接收函数作为参数,例如gevent的spawn函数。此时,lambda函数也能够作为参数传入

作者:独孤球是
来源:CSDN
原文:https://blog.csdn.net/zjuxsl/article/details/79437563
版权声明:本文为博主原创文章,转载请附上博文链接!

42.列表:names=[‘ada’,‘bob’] ,通过索引修改,用list.append在末尾添加项,使用list.insert在任意位置添加项,使用del删除项,使用list.pop(index)删除任意项,使用remove(content)通过某项值删除任意项,使用list.sort(reverse=False)按字母顺序排序,排序后列表顺序永久改变,使用sorted(list)临时修改排序顺序,使用len(list)方法计算列表长度
43.元组:dimensions = (10,20,30),元组是数据项不能修改的列表,元组本身可以重新赋值,如,dimensions = (50,60)
44.PEP 8 格式设置指南,例如:每行都不要超过80个字符,不要在程序文件中过多的使用空行,每级缩进都使用4个空格
45.if A: else B:或者,if A: elif:B else:
46.字典:一系列键值对的组合,例如:alien = {‘color’:‘red’,‘point’:‘5’}
47.字典数据项访问:alien[‘color’]
48.添加字典键值对,直接写如:alien[‘x_position’] = 5 , alien[‘y_position’] = 5 , 添加了水平垂直方向的位置坐标。
49.修改字典中的值:alien[‘color’] = ‘blue’,修改颜色为蓝色。
50.删除字典键值对 del alien[‘point’] 删除point项,被删除的键值对永远消失了。
51.遍历字典键值对:for key,value in alien.items(): , 只遍历键:for key in alien.keys(): ,只遍历值:for value in alien.values():按顺序遍历:for key in sorted(alien.keys()):
52.嵌套:字典存储在列表中,或者列表存储在字典中,或者字典存储在字典中,这称为嵌套。
字典存储在列表中:
alien_0 = {‘color’:‘red’}
alien_1 = {‘color’,‘blue’}
aliens = [alien_0,alien_1]
其他类似。
53.while循环:包括break,continue控制语句以及input函数提供用户输入并且把输入内容存储到字典中,使用标志控制while循环退出

     active = True
       dict = {}
       while active:
           key = input('Please input the key : ')	
    	           if key != 'exit':
               		value = input('please input the value : ')
    		           dict[key] = value		
               continue
    	       else:
    		           active = False
    		           break
    	       print('\n')

   print(dict)	

54.类:在Python中首字母大写的名称指的是类,init(self) ,初始化类,self会自动传入,每个与类关联的方法调用都自动传递实参self,他是一个指向
实例本身的引用,让实例能够访问类中的属性和方法。以self为前缀的变量都可为类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。
55.修改属性的值:有三种方法,第一种:直接修改,my_car.prop = ‘sth’;第二种:通过方法修改属性的值,写关于熟悉的方法来修改;第三种:通过方法对属性的值进行递增,相当于是间接修改,如方法中self.counter += 20;
56.类的继承:如:class ElectricCar(Car): ,然后在__init__(self)方法中调用super().init(self,…),还可以重写父类的方法,重写与直接写一个新方法一样。
57.导入类:导入单个类:from car import Car ,第一个小写字母car是模块名,第二个大写字母Car是类名。
58.在一个模块中存储多个类:可以在一个文件中写多个类,使用的时候单独导入或者群体导入:如car模块写入Car,ElectricCar,Battery三个类,如下:
from car import Car,ElectricCar,Battery,从模块car中导入了三个类。使用的时候直接使用三个类。
59.导入整个模块:import car 使用的时候:my_car1 = car.Car(参数列表) , my_car2 = car.ElectricCar(参数列表)
60.从一个模块中导入另一个模块:将类分散到多个模块中,以免模块太大
61.Python标准库:导入类似,如:from collections import OrderedDict,从模块中导入有序字典类,该类可以记录字典中各项存储顺序。(一般字典是无序的)

62.类编码风格:类名应采用驼峰命名法,即类名首字母大写,不使用下划线。实例名都使用小写字母,并用下划线连接单词如:ElectricCar与elctric_car。对于每个类,都应紧跟在类定义后面包含一个文档字符串。文档字符串简要描述类的功能。每个模块也都应包含一个文档字符串,对其中的类药做什么进行描述。在类中可使用一个空行来分隔方法。在模块中可使用两个空行来分隔类。需要同时导入标准库中的模块和你编写的模块时,优先导入标准库导入然后添加一行空行再导入你编写的模块。

63.文件读取

with open(r'module\ni_digits.txt') as file_object:
       contents = file_object.read()
	       print(contents.rstrip())

其中‘r’后加一串字符串表示按原始字符串解析
64.lines = file_object.readlines()表示按行读取文件,并且把内容存储到列表lines中
65.#json存取列表字典,JSON = JavaScript Object Notation

import json

digits = [1,3,5,7,9]
user_info ={'username':'wangkai', 'country':'China', 'age':'32'}

def json_store_list():
with open('digit_list.json','w') as f_obj:

json.dump(user_info,f_obj)

def json_read_list():
	with open('digit_list.json') as f_obj:
		digit_list = json.load(f_obj)
		print(digit_list)
	
json_store_list()
json_read_list()

66.#待测试的类
#class AnoySurvey():

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 Result:')
	for response in self.responses:
		print('-' + response)

测试用例

import unittest

from anoy_survey import AnoySurvey
class TestAnoySurvey(unittest.TestCase):

#测试用例中可以使用setUp方法,unittest.TestCase中包含这个方法,这个方法会优先于test
#开头的方法运行,可以在该方法中初始化一些类,属性,这些都可以在所有的test方法中使用

def setUp(self):
	question = 'What language did you first learn to speak?'
	self.my_survey = AnoySurvey(question)
	self.responses = ['English', 'Chinese', 'Spanish', 'French',]


def test_store_single_response(self):
	question = 'What language did you first learn to speak?'
	my_survey = AnoySurvey(question)
	my_survey.store_response('English')
	
	self.assertIn('English', my_survey.responses)
	
def test_store_three_responses(self):
	question = 'What is your favorite language ?'
	my_survey = AnoySurvey(question)
	responses = ['English', 'Chinese', 'Spanish', 'French', 'Gemany']
	
	for response in responses:
		my_survey.store_response(response)
	
	for response in responses:
		self.assertIn(response,my_survey.responses)
				
unittest.main()
  1. flake8 -help
    flake8 + 文件名
    pip serch flake8
    pip list 列出所有的安装包
    python -m pip uninstall pip 卸载pip
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值