: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

Python-核心语法

Python-核心语法

一、变量

1.1 定义

可变的量,x="hello",这里x就是一个变量。

1.2 变量名规则

变量名由字母(a-z, A-Z)、数字(0-9)和下划线(_)组成

变量名不能以数字开头

变量名是区分大小写的

在此基础上,也约定了一些变量名的命名规范(非硬性要求,是程序员们的一种约定俗成的规则,使得可读性更高):

普通变量一般用小写字母

最好不要用单词加数字的方式来命名变量,尤其是没有意义的随机数字

有两种风格的变量名:单词之间用下划线隔开;每个单词的首字母使用大写字母(也称为驼峰命名法)

1.3 关键字

命名时要避免使用关键字



同时也要避免使用方法来命名,如print

1.4 变量赋值

变量可以重复使用,也可以修改。Python的声明和赋值在同一行代码完成。

如:
  1. name="Rabbit"
复制代码
先定义了一个名为"name"的变量,然后给它赋值为"Rabbit"。变量必须要先声明,才能使用。否则会报错。
  1. NameError: name 'xxx' is not defined
复制代码
在变量定义完成后,我们可以随意读取、修改它的值,如:
  1. # 定义name变量,赋值为"Rabbit"
  2. name = "Rabbit"
  3. print("Dear", name)
  4. # 修改变量的值为"Carrot"
  5. name = "Carrot"
  6. print("Dear", name)
复制代码
如果同时定义三个变量,并且都赋值为1,可以:
  1. a = b = c = 1
复制代码
给a,b,c分别赋值为1,2,3,可以:
  1. a,b,c = 1,2,3
复制代码
也可以直接交换几个变量的值:
  1. # 定义两个变量,其中a=1, b=2
  2. a, b = 1, 2
  3. # 进行交换,现在a=2, b=1
  4. a, b = b, a
复制代码
1.5 变量的销毁(不是很重要的样子)

一般无需手动的去销毁变量,Python的垃圾回收机制会帮我们处理掉那些不再使用的变量,如果我们想刻意销毁删除某个变量,可以使用del关键字
  1. del name
复制代码
销毁后,这个变量就像没有定义过一样,再使用它的话就会产生异常。

二、数据类型

Python中,变量不区分类型,但是变量的值有类型。

2.1 数据类型

数值型

整型 int

浮点型 float

——整型和浮点型可以相互运算,只要有浮点型参与运算,结果就是浮点型

字符串

字符串放在引号中

当字符串中需要显示引号本身,又怕与字符串的引号搞混,这时可以使用反斜杠\来进行转义——例如 \"的意思就是这里的引号就是引号本身,不具有其他的特殊作用
  1. print("Rabbit: \"Let me eat.\"")
  2. # 输出的结果是:Rabbit: "Let me eat."
复制代码
Python既可以使用双引号又可以使用单引号,所以如果我们想要在字符串中显示引号,也可以不用转义,直接使用单引号定义字符串,这样字符串中的双引号就会显示为双引号本身了
  1. print('Rabbit: "Let me eat."')
  2. # 输出的结果是:Rabbit: "Let me eat."
复制代码
如果要定义的字符串很长,编写的时候可以使用反斜杠\来连接多行,例如:





输出的时候还是会显示为一整行

当然如果特别长呢,也可以使用三引号(三对双引号 或者 三对单引号 都可以)




布尔值(True and False)——关键字,不能定义为变量名

空值(None)

None也是关键字

作用:如想定义一个变量,但是赋值与类型都没决定,可以先赋值为None

None被print输出是显示为字符串None
  1. temp = 'None'
  2. print(temp)
  3. # 输出结果为:None
复制代码
2.2 类型转换

2.2.1 布尔值转换

内置函数bool()——把其他值转换为布尔值

对于数值类型,所有的非零值转换为True, 只有零值才转换为False

对于任何非空的字符串,转换为布尔值都是True

空值None转换为布尔值永远都是False
  1. # Some examples
  2. print("bool(1)=", bool(1))
  3. print("bool(-1)=", bool(-1))
  4. print("--对于非0数值,转换结果都为True")
  5. print("bool(0)=", bool(0))
  6. print("--0值转换结果为False")
  7. print("bool('')=", bool(''))
  8. print("--空字符串转换结果为False")
  9. print("bool(None)=", bool(None))
  10. print("--空值转换结果为False")
  11. print("bool('abc')'=", bool('abc'))
  12. print("--字符串转换结果为True")
  13. print("bool(' ')=", bool(' '))
  14. print("--只包含一个空格的字符串,转换结果为为True")
复制代码


2.2.2 字符串转换

内置函数str()——把其他类型转换为字符串

True, False, None 这三个值转换为字符串就是它们的单词本身,实际上在实际编程中,我们很少需要把它们转换成字符串来使用。

对于数值类型,也可以用str()将它们转换为字符串

float()——把一个带小数点的字符串转换为float类型
  1. # some example
  2. print("str(True)=", str(True))
  3. print("str(False)=", str(False))
  4. print("str(None)=", str(None))
  5. print("Rabbit is ", str(18))
  6. print("--这里不进行强制转换的话,也不会出错,因为print函数会自动将数值先转换成字符串再输出")
复制代码


2.2.3 数值转换

内置函数int()——把一个整数字符串转换为int类型

数值的前后带有空格也可以成功转换

带有符号的数字也可以成功转换

float()——把一个带小数点的字符串转换为float类型

int类型和float类型之间也可以相互转换——注意float在被转换为int的过程中,它的小数部分精度将被丢弃,只取整数部分——如果想要四舍五入的来转换,要使用函数round
  1. # some example
  2. num = "1"
  3. print(num + 1)
  4. # 这里会报错,因为num是个字符串,不能将字符串和数值进行相加
复制代码
  1. # some example

  2. print(int(num)+1)
  3. # 把一个整数字符串转换为int类型,结果为2

  4. print(int(" 100 "))
  5. # 数值的前后带有空格也可以成功转换,结果为100

  6. print(int("-1"))
  7. # 带有符号的数字也可以成功转换,结果为-1

  8. print(int("+1"))
  9. # 带有符号的数字也可以成功转换,结果为1

  10. print(float("3.14"))
  11. # 把一个带小数点的字符串转换为float类型,结果为3.14

  12. # int类型和float类型之间也可以相互转换
  13. print(int(3.14)) # 结果为3
  14. print(int(9.9)) # 结果为9,只取整数部分,舍弃小数部分。
  15. print(float(100)) # 结果为100.0

  16. # 四舍五入的将浮点数转换为整数
  17. print(round(9.9))  #结果为10
  18. print(round(9.5))  #结果为10
  19. print(round(9.49)) #结果为9

  20. # round函数可以指定保留小数点后几位
  21. print(round(3.1415926, 2)) # 四舍五入并保留小数点后两位,结果为3.14
  22. print(round(3.1415926, 3)) # 四舍五入并保留小数点后三位,结果为3.142

  23. # 布尔值也可以转换为int或float
  24. print(int(True)) # 结果为1
  25. print(int(False)) # 结果为0
  26. print(float(True)) # 结果为1.0
  27. print(float(False)) # 结果为0.0
复制代码
三、运算符

3.1 算数运算符



注意

当我们使用单斜杠除法运算符时,即使除数和被除数都是整数,它的返回结果也是一个浮点数。

对于取模运算,可以先理解为余数,还是有一些不同的,需要注意的几点如下:

当两个数能整除时,取模运算的结果为0
当0<a<b时,a % b = a,比如 3 % 8 的结果是3
当两个数中有负数时,公式:a % b 就相当于a -(a // b) * b
0不能作为除数,也不能用来取模

3.2 使用算数运算符操作字符串

字符串在Python中也可以“运算”
  1. # 拼接字符串
  2. print("hello " + "world")
  3. # 拼接5个apple,用加法
  4. print("apple"+"apple"+"apple"+"apple"+"apple")
  5. # 拼接5个apple,也可以乘以5,表示重复拼接5次
  6. print("apple" * 5)
复制代码
使用加号拼接字符串时需要注意,不能将字符串与数值一起相加。需要先将数值转换为字符串。
  1. print("apple" + str(200))
复制代码
3.3 赋值运算符

等于号 =



常用的是加法赋值和减法赋值

3.4 比较运算符

比较运算符是用来运算布尔值的, 将两个值放在一起比较,最后得到True或者False。

  1. # some example
  2. print(100 == 100)  # True
  3. print(100 == "abc")    # False
  4. print(1 != 2)  # True
  5. print(2 != 2)  # False
  6. print(3 > 3)   # False
  7. print(3 >= 3)  # True
  8. print(2 < 3)   # True
  9. print(2 <= 3)  # True
  10. print(100 == "100")    # False -- 数值100 和字符串"100"是不相等的,注意容易出bug
  11. print(100 == 50 * 2)   # True -- 数学上相等
  12. print(str(100) == "100")   # True -- 都是字符串
  13. print(1.0 != 1)    # False -- 数学上是相等的
  14. print(int(1.9) == 1)   # True -- int直接去掉小数部分
复制代码
3.5 逻辑运算符



and, or, not 也是三个常用关键字

----延伸,逻辑运算符 可以和 赋值操作组合,让代码更老练,例如:

a = 0 or 100 是返回100的,因为0为False,100为True,所以返回True的值
b = 1 or 100 是返回1的,因为1为True,后边是or,就不会再往后执行了

四、流程控制

4.1 条件判断

4.4.1 if…else…
  1. # 判断奇偶数-通过取模运算判断num是否能被2整除
  2. num = 3
  3. if num % 2 == 0: # if 和 else语句后要写冒号
  4.     print(num, "是一个偶数") # if 冒号后的语句需要严格缩进
  5. else:
  6.     print(num, "是一个奇数")
  7. print("程序结束") # 没有缩进,不在else语句下,所以一定会执行,不根据条件判断
复制代码
4.4.2 elif
  1. # 判断成绩
  2. # 60以下 不合格
  3. # 60-90 合格
  4. # 90以上 优秀
  5. # 快捷键-- 可以使用ctrl + / 进行多行注释

  6. score = 59
  7. if score < 60 :
  8.     print("您的成绩不及格")
  9. elif score <90: # 增加了一个条件,elif只能用在if判断之后,else之前
  10.     print("您的成绩合格")
  11. else:
  12.     print("您的成绩优秀")
复制代码
4.4.3 if 条件嵌套
  1. # 判断成绩
  2. # 60以下 不合格
  3. # 60-70 合格
  4. # 70-90 良好
  5. # 90以上 优秀

  6. if score >= 60:
  7.     if score < 70:
  8.         print("您的成绩合格")
  9.     elif score <90:
  10.         print("您的成绩良好")
  11.     else:
  12.         print("您的成绩优秀")
  13. else:
  14.     print("你的成绩不及格")
复制代码
嵌套循环可以嵌套无数层,但通常我们都建议尽量减少嵌套的层数,以增加代码的可读性。

4.4.4 与逻辑运算符组合
  1. # 与逻辑运算符组合
  2. age = 17
  3. if age >= 18 and age <60:
  4.     print("你已经不是个孩子了,赶紧去工作吧")
  5. else:
  6.     print("你还是个孩子")
  7. # 更简洁的写法
  8. if 18 <= age < 60:
  9.     print("你已经不是个孩子了,赶紧去工作吧")
  10. else:
  11.     print("你还是个孩子")
复制代码
4.45 自动类型转换

if 和 elif 的后面总是跟着一个表达式,这个表达式的结果必须是True或者False,如果表达式运算出来的结果不是一个布尔值,则会自动将结果转换为布尔值,无论它是什么类型的值。转换的结果遵循我们之前学过的布尔转换规律。
  1. # count=0 转化为了false,结果返回条件不成立;若count=1则返回条件成立
  2. count = 0
  3. if count:
  4.     print("条件成立")
  5. else:
  6.     print("条件不成立")

  7. # 0值、None 和空字符串转换为布尔值后都是False
  8. # 应用:例如我们去数据库获取一些数据,返回结果为result,可以用if result来判断result是否有值,而不会使用result == None这种写法
  9. result = None
  10. if result:
  11.     pass # pass是Python的关键字,它表示什么也不做
  12. else:
  13.     print("什么收获都没有")
复制代码
0值、None 和空字符串转换为布尔值后都是False

4.2 循环

4.2.1 while循环
  1. lap = 0
  2. while lap < 10:  # 循环条件
  3.     lap += 1
  4.     print("我跑完了第" + str(lap) + "圈")  # 循环体
  5. print("跑步结束")
复制代码


4.2.2 for循环

for循环可以用来遍历序列,序列指的是一个可迭代的有序的集合,比如字符串就是一个序列
  1. seq = 'hello'
  2. for i in seq:
  3.     print(i)
复制代码
输出结果:



也可以用for循环来打印一连串的数字,这里需要用到一个新的内置函数:range
  1. for i in range(3):
  2.     print(i)
复制代码
range函数的作用就是提供一个从0到4的迭代器,而for可以遍历这个迭代器。

我们的序列都是0开始的,range(n)输出n个数也就是0 ~ n-1

将上个例子中的while循环,改用for+range来写:
  1. for lap in range(10):
  2.     print("我跑完了第"+str(lap+1)+"圈")  # 注意range从0开始,所以记得+1
复制代码
for循环更简洁

4.2.3 嵌套循环
  1. # 打印一个长方形
  2. # 指定宽和高
  3. width, height = 10, 5
  4. # 循环是里边的先执行,所以把宽放里边,外侧先便利高度
  5. for _ in range(height):
  6.     for i in range(width):
  7.         print("*", end="")  # end表示在打印完指定的内容后,在结尾再打印一个指定的字符串,默认为换行符"\n",传递一个空字符串表示打印完星号以后不再添加任何输出内容
  8.     print()  # print函数没有任何参数,会输出一个换行符
复制代码
  1. # 打印一个直角三角形
  2. for i in range(5):
  3.     for _ in range(i+1):
  4.         print("*",end="")
  5.     print()
复制代码


for 后边的变量名i 其实换成别的也都是可以的
  1. # 打印九九乘法表
  2. # range(1,10)的意思是从1开始,输出9个
  3. for i in range(1,10):
  4.     for j in range(1,i+1):
  5.         print(str(j) + "*" + str(i) + "=" + str(j*i), end=" ")
  6.     print()
复制代码
4.2.4 break和continue

在循环内部,临时略过某次循环或者跳出整个循环需要用到continue 和 break。

重新来看我们while循环的第一个例子(跑十圈那个)

continue的作用是可以将本轮循环剩余的代码跳过去,直接回到循环条件开始的地方
  1. lap = 0
  2. while lap < 5:  # 循环条件
  3.     lap += 1
  4.     if lap == 2:
  5.         continue
  6.     print("我跑完了第" + str(lap) + "圈")  # 循环体
  7. print("跑步结束")
复制代码
  1. # 10以内所有奇数相加的结果
  2. total = 0
  3. for i in range(10):
  4.     if i % 2 == 0:
  5.         continue
  6.     # 能够执行到这里的都是奇数
  7.     total += i
  8.     # total = total + 1
  9.     print(i, end="")
  10.     if i == 9:
  11.         continue
  12.     print(" + ", end="")
  13. print(' =', total)
复制代码
  1. # 如果想计算20以内的呢? 我们可以把range里的值定义为变量,便于修改参数

  2. total = 0
  3. max = 20
  4. for i in range(max):
  5.     if i % 2 == 0:
  6.         continue
  7.     # 能够执行到这里的都是奇数
  8.     total += i
  9.     # total = total + 1
  10.     print(i, end="")
  11.     if i == max-1:
  12.         continue
  13.     print(" + ", end="")
  14. print(' =', total)
复制代码


break用来打断整个循环并跳出
  1. s = "238.9237834829"
  2. # 打印出整数部分
  3. for i in s:
  4.     if i == '.':
  5.         break
  6.     print(i, end="")
复制代码
continue 和 break 的区别:

continue是跳过本轮的循环,但是整个循环还要继续下一轮;

break是跳出整个循环;

continue和break只能在循环内部使用;

4.3 演示:智能密码锁程序
  1. # 设置初始密码
  2. password = '123'
  3. while True:
  4.     pwd = input('请输入您的密码:\n')
  5.     if not pwd:
  6.         break
  7.     confirm_pwd = input('请再次输入您的密码:\n')
  8.     if pwd == confirm_pwd:
  9.         password = pwd
  10.         break
  11.     print('您两次输入的密码不一致,请重新输入')
  12. print('您的初始密码已设置为:',password)

  13. print("进入开锁程序")
  14. # 开锁
  15. failed_time = 0
  16. while True:
  17.     input_pwd = input('请输入您的密码:\n')
  18.     if password in input_pwd:  # 判断输入的密码中是否包含密码,关键字in表示如果在指定的序列中找到值返回 True,否则返回False
  19.         print('开锁成功')
  20.         break
  21.     else:
  22.         failed_time += 1
  23.         if failed_time >= 3:
  24.             print('输入错误超过3次,请联系主人')
  25.             break
  26.         print('您输入的密码有误,请重新输入')
复制代码
原文:https://zhuanlan.zhihu.com/p/413311556

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表