实战blog中的问题–day3 ORM
标签(空格分隔): 笔记 知识点 ORM
1、 global 全局变量
变量的作用域在函数内,或者称为是局部变量。如果需要在函数内对全局变量进行修改,而不进行参数调用,那么可以使用全局变量。在函数内部即局部,使用global
声明参数,之后就可以调用全局变量。
全局变量不建议常用,如果操作不当,可能会造成参数调用出错。
2、 函数参数:可变参数、关键字参数
- 可变参数:传入参数除必要参数外,还可以传入不定量个参数,并将这些可变参数在函数调用时自动组合成一个
tuple
>>>def fun1(a, *args):
print(a, args)
>>> fun1(1,2)
>>> 1 (2,)
- 关键字参数:在必选参数外,还可传入不定数目个关键字参数,函数在调用时,将这些关键字参数组合成一个
dict
传入函数。 也可以先组成一个
dict
再传入函数。如果同时需要传入:必选参数,默认参数,可变参数和关键字参数,必须按照上述顺序传入。
3、 dict 字典
dict中获取成员可以有两种方法:
- dict[key] :可以获取对应key的值
- get方法:dict.get(D[,a]),其中
[,a]
为可选,默认为None
,如果dict中存在key
为D
那么返回对应值,否则返回a
对应的值(如果没有a则返回None)。
4、super()函数
用于调用父类的一个方法。用来解决多重继承的问题,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class FooParent(object):
def __init__(self):
self.parent = 'I\'m the parent.'
print ('Parent')
def bar(self,message):
print ("%s from Parent" % message)
class FooChild(FooParent):
def __init__(self):
# super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类B的对象 FooChild 转换为类 FooParent 的对象
super(FooChild,self).__init__()
print ('Child')
def bar(self,message):
super(FooChild, self).bar(message)
print ('Child bar fuction')
print (self.parent)
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
执行结果:
Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.
5、classmethod
classmethod 修饰符对应的函数不需要实例化,不需要self
参数,但第一个参数需要是表示自身类的cls
参数,可以来调用类的属性,类的方法,实例化对象等。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class A(object):
bar = 1
def func1(self):
print ('foo')
@classmethod
def func2(cls):
print ('func2')
print (cls.bar)
cls().func1() # 调用 foo 方法
A.func2() # 不需要实例化
结果:
func2
1
foo
6、mapping & map
map()方法:
map()
会根据提供的函数对指定序列做映射,语法:
map(function, iterable, …)
function:函数,有两个参数。
Iterable:一个或多个序列。
返回一个迭代器。
>>>def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
dict的参数mapping
7、mateclass 元类(单独成篇)
8、ORM(需要单独写一篇)
ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。
9、 装饰器 (已单独成篇)
10、关系数据库
11、 with
with的方法可以代替try ... finally ...
的语句打开文件,而且不必调用f.close()
方法:
with open('path') as f:
for line in f:
print(line, end="")
12、join()
将序列中的元素,以指定的字符链接生成新字符串。str.join(seq)
\>>> seq = ('a','b','c')
\>>> print(','.join(seq))
\>>> 'a,b,c'
13、yield & coroutine(协程)(单独)
在使用@asyncio.coroutine
时需要搭配yield from
从协程获取信息。
但是,Python3.5之后可以使用async
修饰def
而不用装饰器@asyncio.coroutine
,那么在获取协程数据时,搭配使用await
。
具体作用是相同的。