克隆策略

一、打印语句和变量

In [6]:
print("Hello, Python!")
Hello, Python!
In [7]:
msg="Hello, Python!"
print(msg)
Hello, Python!

二、注释

In [8]:
# 这是使用#号注释, 该语句不会被运行, 使用快捷键 Ctrl + / 切换

'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''

"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

print("Hello, Python!")
Hello, Python!

三、多行语句

In [9]:
"""Python语句中一般以新行作为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示"""
total = 1 + \
        2 + \
        3
total
Out[9]:
6

四、数据类型

Python有五个标准的数据类型:

  • Numbers(数字) : int(有符号整型) long(长整型[也可以代表八进制和十六进制]) float(浮点型) complex(复数)

  • List(列表)

  • Tuple(元组)

  • String(字符串)

  • Dictionary(字典)

4.1 数字Numbers

In [10]:
'''数据类型转换'''
print(float(2))
print(int(2.9))
2.0
2
In [11]:
'''运算符'''
print(10 + 4)  # 加法
print(10 - 4)  # 减法
print(10 * 4)  # 乘法
print(10 / 4)  # 除法
print(10 % 4)  # 求余  常用于周期控制
14
6
40
2.5
2

4.2 列表List

In [ ]:
'''定义: 方括号定义的元素组合,元素之间用逗号隔开'''
[1,2,3]
In [12]:
'''创建列表,使用方括号[]定义'''
empty_list = []
empty_list = list()
instruments = ['600010.SHA', '000001.SZA', '300010.SZA']
instruments
Out[12]:
['600010.SHA', '000001.SZA', '300010.SZA']
In [13]:
'''列表元素个数'''
print(len(instruments))

'''获取列表的第一个元素'''
print(instruments[0])

'''获取列表的最后一个元素'''
print(instruments[-1])
3
600010.SHA
300010.SZA
In [14]:
'''列表的引用'''
print(instruments[0:2]) # 输出列表的前两个元素
print(instruments[::2]) # 从第一个元素instruments[0]到最后一个元素每间隔2个元素采样组成List输出
['600010.SHA', '000001.SZA']
['600010.SHA', '300010.SZA']
In [15]:
'''添加一个元素'''
instruments.append('300102.SZA')
print(instruments)
['600010.SHA', '000001.SZA', '300010.SZA', '300102.SZA']
In [16]:
'''添加多个元素'''
instruments = instruments + ['300010.SZA', '600033.SHA']  
print(instruments)
['600010.SHA', '000001.SZA', '300010.SZA', '300102.SZA', '300010.SZA', '600033.SHA']
In [17]:
'''修改第一个元素'''
instruments[0] = '600012.SHA'
instruments
Out[17]:
['600012.SHA',
 '000001.SZA',
 '300010.SZA',
 '300102.SZA',
 '300010.SZA',
 '600033.SHA']
In [18]:
'''删除第一个出现元素'''
instruments.remove('600033.SHA')
instruments
Out[18]:
['600012.SHA', '000001.SZA', '300010.SZA', '300102.SZA', '300010.SZA']
In [19]:
'''排序 sort'''
instruments.sort()  # 直接修改原始list
instruments
Out[19]:
['000001.SZA', '300010.SZA', '300010.SZA', '300102.SZA', '600012.SHA']
In [20]:
'''反向排序,直接修改原始list'''
instruments.sort(reverse=True)
instruments
Out[20]:
['600012.SHA', '300102.SZA', '300010.SZA', '300010.SZA', '000001.SZA']
In [ ]:
'''使用reversed函数反向排序, 不修改原始list'''
list(reversed(instruments))
In [21]:
'''查询元素的索引'''
instruments.index('000001.SZA')
Out[21]:
4
In [22]:
'''查询列表中指定元素出现次数'''
instruments.count('000001.SZA')
Out[22]:
1

4.3 元组

In [ ]:
'''使用圆括号()定义的元素组合,与列表的不同在于元组的元素是不能修改的'''
digits = (0, 1, 'two')
digits
In [23]:
'''将列表转化为元组'''
digits = tuple([10, 'a'])
digits
Out[23]:
(10, 'a')
In [24]:
'''选取元组的第一个元素'''
digits[0]
Out[24]:
10
In [25]:
'''元组无法赋值,提示错误'''
digits[0]=1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-7c35213961f8> in <module>
      1 '''元组无法赋值,提示错误'''
----> 2 digits[0]=1

TypeError: 'tuple' object does not support item assignment

4.4 字符串

In [26]:
'''创建字符串'''
s = '000001.SZA'

'''计算字符串长度'''
print(len(s))

'''字符串索引'''
print(s[0])
print(s[0:6])
10
0
000001

4.5 集合

In [27]:
'''使用花括号{}定义的元素组合,集合中元素是唯一的(字符串, 数字, or 元组)'''

'''创建空集合'''
empty_set = set()

'''创建非空集合'''
plates = {'上海主板', '深圳主板', '创业板'}

'''将列表转化为集合'''
concepts = set(['创业板', '次新股', '国企'])
In [28]:
'''集合求交集'''
print(plates & concepts)

'''集合求并集'''
print(plates | concepts)

'''集合求差集'''
print(plates - concepts)
{'创业板'}
{'上海主板', '创业板', '次新股', '深圳主板', '国企'}
{'上海主板', '深圳主板'}
In [29]:
'''列表去重'''
a=['000001.SZA','600001.SHA','000001.SZA']
set(a)
Out[29]:
{'000001.SZA', '600001.SHA'}

4.6 字典

In [30]:
'''使用花括号 {} 定义的二元元组元素列表,
   每个元素由键名-键值成对组成,每个键值对之间用逗号分隔,
   键名必须是唯一的, 可以使用字符串、数字或者元组'''
   
'''创建一个空字典(两种方法)'''
empty_dict = {}
empty_dict = dict()

'''创建持仓字典'''
positions = {'300010.SZA':'100股', '002100.SZA':'200股', '600010.SHA':'300股'}
In [31]:
'''查看字典长度'''
len(positions)
Out[31]:
3
In [32]:
'''根据键名获取键值'''
print(positions.get('002100.SZA',0))
print(positions['002100.SZA'])
print(positions.get('111111.SZA','0股'))
200股
200股
0股
In [ ]:
'''修改字典键值'''
positions['002100.SZA'] = '5手'
print(positions)

'''根据键名删除字典的键对'''
del positions['002100.SZA']
positions.pop('300010.SZA')
print(positions) 

'''为字典增加键对'''
positions['002102.SZA'] = '1000股'
print(positions)
In [33]:
'''字典的索引'''
print(positions.keys())    # 键名查询
print(positions.values())  # 键值查询
print(positions.items())   # 键对查询
dict_keys(['300010.SZA', '002100.SZA', '600010.SHA'])
dict_values(['100股', '200股', '300股'])
dict_items([('300010.SZA', '100股'), ('002100.SZA', '200股'), ('600010.SHA', '300股')])

5、函数

In [34]:
'''定义函数案例'''
def square(x):
    return x**2

'''调用函数'''
result = square(3)
print(result)
9
In [35]:
'''使用pass作为占位符:'''
def stub():
    pass
print(stub())
None
In [36]:
'''lambda 表达式函数等价于def函数定义'''
def squared(x):
    return x**2

squared2 = lambda x: x**2
squared2(3)
Out[36]:
9

6、循环

In [37]:
'''对字典键对循环,依次打印字典的键名和键值'''
positions = {'300010.SZA':'100股', '002100.SZA':'200股', '600010.SHA':'300股'}

for item in positions.items():
    print(item, '股数',item[0], '股票:',item[1])
    
for key, value in positions.items():
    print(key, value)
('300010.SZA', '100股') 股数 300010.SZA 股票: 100股
('002100.SZA', '200股') 股数 002100.SZA 股票: 200股
('600010.SHA', '300股') 股数 600010.SHA 股票: 300股
300010.SZA 100股
002100.SZA 200股
600010.SHA 300股
In [39]:
'''使用continue跳过某轮循环,继续执行后续循环'''
for key, value in positions.items():
    if key[0]=='0':
        continue
    print(key, value)
300010.SZA 100股
600010.SHA 300股
In [38]:
'''使用break终止循环'''
for key, value in positions.items():
    print(key, value)
    if key[0]=='3':
        break
300010.SZA 100股
In [40]:
'''while循环, 判断如果满足条件则一直循环'''
count = 0
while count < 3:
    print(count)
    count += 1    # 等价于 'count = count + 1'
0
1
2

7、生成式

语法: [expression for variable in iterable if condition]

列表生成式

In [42]:
'''生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]'''
[k for k in range(1, 11)]
Out[42]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [ ]:
'''生成list [1x1, 2x2, 3x3, ..., 10x10]'''
[x**2 for x in range(1, 11)]
In [49]:
'''添加if条件判断,只对偶数生成list [1x1, 2x2, 3x3, ..., 10x10]'''
[x**2 for x in range(1, 11) if x%2==0 ]
Out[49]:
[4, 16, 36, 64, 100]
In [47]:
''' 添加if - else条件分支,只对偶数做平方运算 奇数保持不变 '''
[x**2 if x%2==0 else x for x in range(1, 11) ]
Out[47]:
[1, 4, 3, 16, 5, 36, 7, 64, 9, 100]
In [53]:
'''利用列表生成式获取持仓股票列表中3开头的创业板股票'''
stocks_hold = ['000010.SZA','300001.SZA','600012.SHA']
stocks_filter = [ stock for stock in stocks_hold if stock[0]=='3' ]
stocks_filter
Out[53]:
['300001.SZA']
In [54]:
'''利用列表生成式, 对持仓列表遍历循环'''
sell_list = [ '000010.SZA', '600010.SHA']
stock_to_sell = [ stock for stock in stocks_hold if stock in sell_list ]
stock_to_sell
Out[54]:
['000010.SZA']

字典生成式

构造一个持仓字典,键名为股票代码,键值为另一个字典,包含了股票的持仓数量amount和成本cost、买入日期last_sale_date
In [55]:
positions = {'300010.SZA':{'amount': 100, 'cost': 6.10, 'last_sale_date': '2019-01-03'}, 
             '002100.SZA':{'amount': 200, 'cost': 3.12, 'last_sale_date': '2019-03-03'}, 
             '600010.SHA':{'amount': 300, 'cost': 15.10,'last_sale_date': '2019-04-03'}}
In [57]:
my_positions = {instrument:position['amount'] for instrument, position in positions.items()}
print(my_positions)
{'300010.SZA': 100, '002100.SZA': 200, '600010.SHA': 300}

8、条件语句

In [58]:
x=30
y=42
In [59]:
'''判断是否等于'''
print(x==y)

'''判断是否不等于'''
print(x!=y)

'''判断是否大于'''
print(x>y)

'''判断是否小于等于'''
print(x<=y)
False
True
False
True
In [60]:
'''使用if-else构建条件分支'''

if x>42:
    print('x大于42')
else:
    print('x小于等于42')
x小于等于42
In [61]:
'''使用if-elif-else构建条件分支'''

if x>42:
    print('x大于42')
elif x==42:
    print('x等于42')
else:
    print('x小于42')
x小于42