''' 机器学习基础之Python的基本语法 ''' # 打印数据到控制台:python2中是不需要括号的;python3需要带括号 print("Hello World!!") # 值得一提的是,代码结尾的;是可有可无的 # 同时打印多个变量,各个变量之间用,隔开 a = "我是:" b = "象在舞" print(a, b) # python3中支持了Unicode(utf-8)字符串 姓名 = '象在舞' print(姓名) # 注解的使用:单行注释采用#开头;多行注释使用三个单引号'''或三个双引号"""表示 # 数据类型:1、Python 中的变量赋值不需要类型声明;2、Python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头,区分大小写; # 3、以下划线开头的标识符有特殊意义。如:_foo 不能直接访问,需通过类提供的接口进行访问;4、在 python 中,变量是没有类型的,如:a=[1,2,3];a="Runoob" # [1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以指向 List 类型对象,也可以指向String类型对象; # Python3有六个标准的数据类型:Number(数字);String(字符串);List(列表);Tuple(元组);Dictionary(字典);Set(集合,Python3新加的) # 数字:Python3支持三种不同的数字类型:int(有符号整型);float(浮点型);complex(复数:由实数和虚数构成,用a + bj,或complex(a,b)来表示) # long(长整型,注:在Python3里被去除了) a = 100 print(a) b = 1.23 print(b) c = 10 + 2j # 复数(实数+虚数) print(c) # 字符串:使用引号( ' )、双引号( " )、三引号( ''' 或 """ )来表示字符串,其中三引号可以由多行组成 a = 'xzw' b = "我是象在舞" c = '''我是象在舞, 来自上海''' print(a, b, ' ', c) # 中间用空格间隔 str = 'Hello World!' print(str) print(str[0]) # 输出字符串中的第一个字符 print(str[2:5]) # 输出字符串中第三个至第五个(不包含第6个)之间的字符串 print(str[2:]) # 输出从第三个字符开始的字符串 print(str * 2) # 输出字符串两次 print(str + "I am xzw.") # 输出连接的字符串 # print(str+1) # 错误,不可以是非字符串类型(和java不一样) # 这种方法效率低,python中字符串是不可变的类型,使用 + 连接两个字符串时会生成一个新的字符串,生成新的字符串,就需要重新申请内存,当连 # 续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了 print('a' + 'b' + 'c') # 略复杂,但对多个字符进行连接时效率高,只会有一次内存的申请。如果是对list的字符进行连接的时候,这种方法是首选 listStr = ['a', 'b', 'c'] s = ''.join(listStr) print(s) # 字符串格式化,这种方法非常常用 print('%s%s%s' % ('a', 'b', 'c')) print( 'Hello: %s %s %s' % ('xzw', 100, 22.3) ) # 多个变量同时赋值 a, b, c = 1, 2.2, "xzw" print(a, b, c) # 列表:List(列表)是Python中使用最频繁的数据类型,列表支持字符,数字,字符串,还可以包含列表(即嵌套) list = ['xzw', 786, 2.23, 'Eric', 70.2] tinylist = [123, 'Eric'] print(list) # 输出完整列表 list[0] = 'aaa' print(list[0]) # 输出列表的第一个元素 print(list[1:3]) # 输出第二个至第三个的元素,不包括第四个 print(list[2:]) # 输出从第三个开始至列表末尾的所有元素 print(tinylist * 2) # 列表元素重复两次 print(list + tinylist) # 将两个列表合并 # 元组:组是另一种数据类型,类似于List(列表)。元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。 tuple = ( 'xzw', 786 , 2.23, 'Eric', 70.2 ) tinytuple = (123, 'Eric') print(tuple) # 输出完整元组 # tuple[0]='aaa' # 错误 print(tuple[0]) # 输出元组的第一个元素 print(tuple[1:3]) # 输出第二个至第三个的元素 print(tuple[2:]) # 输出从第三个开始至列表末尾的所有元素 print(tinytuple * 2) # 输出元组两次 print(tuple + tinytuple) # 打印组合的元组 # 字典 dict = {} dict['xzw'] = "This is xzw" dict[2] = "This is two" tinydict = {'name': 'xzw', 'code':6734, 'dept': 'sales'} print(dict['xzw']) # 输出键为'one' 的值 print(dict[2]) # 输出键为 2 的值 print(tinydict) # 输出完整的字典 print(tinydict.keys()) # 输出所有键 print(tinydict.values()) # 输出所有值 # Set:Python3新加入的 student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'} print(student) #重复的元素被自动去掉 if('Rose' in student) : print('Rose 在集合中') else : print('Rose 不在集合中') # set可以进行集合运算 a = set('abcde') b = set('abcfg') print(a) print(b) print(a - b) # a和b的差集 print(a | b) # a和b的并集 print(a & b) # a和b的交集 print(a ^ b) # a和b中不同时存在的元素 # bytes类型:Python3新加入的 b = b'xzw' print(b[0]) #打印出的是ascii码 print(type(b)) #查看类型 s = b.decode() #转换为字符串 print(s) b1 = s.encode() #转换为bytes类型 print(b1) # 可变与不可变:在 python 中,string, tuple, 和 number 是不可更改的对象,而 list,dict 等则是可以修改的对象 # 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a # 可变类型:变量赋值 list=[1,2,3,4] 后再赋值 list[2]=5 则是将llist的第三个元素值更改, list本身没有动,只是其内部的一部分值被修改了 # 运算符 print(2 ** 3) # 8 求幂 print(10 // 3) # 3 求整数商 print(1 / 2) # 0.5,和其他语言有所不同 a = 100 a += 1 # 没有a++ print(a) # 关系运算符: > < == != ( <> 在Python3中不支持) >= <= # 逻辑运算符:0为假,非0为真 a = 10 b = 20 if (a and b): print("1 - 变量 a 和 b 都为 true") else: print("1 - 变量 a 和 b 有一个不为 true") if (a or b): print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true") else: print("2 - 变量 a 和 b 都不为 true") # 修改变量 a 的值 a = 0 if (a and b): print("3 - 变量 a 和 b 都为 true") else: print("3 - 变量 a 和 b 有一个不为 true") if (a or b): print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true") else: print("4 - 变量 a 和 b 都不为 true") if not (a and b): print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false") else: print("5 - 变量 a 和 b 都为 true") # 成员运算符:in、not in a = 1 b = 20 list = [1, 2, 3, 4, 5]; if (a in list): print("1 - 变量 a 在给定的列表中 list 中") else: print("1 - 变量 a 不在给定的列表中 list 中") if (b not in list): print("2 - 变量 b 不在给定的列表中 list 中") else: print("2 - 变量 b 在给定的列表中 list 中") # 身份运算符 # is 是判断两个标识符是不是引用自一个对象,x is y 类似 id(x) == id(y) # is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等 a = 20 b = 20 print(a is b) print(a is not b) # 修改变量 b 的值 b = 30 print(a is b) print(a is not b) # is在Python命令行中比较特殊,为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法,如指向a = 2,b = 2 # 时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象 # c = 20 # d = 20 # c is d # True # 如但果赋值的不是2而是较大的数值,情况就不一样了: # c = 5555 # d = 5555 # c is d # False # 条件:python并不支持switch语句 num = 5 if num == 3: print('boss') elif num == 2: print('user') elif num == 1: print('worker') elif num < 0: print('error') else: print('roadman') # 代码组:Python与其他语言最大区别是,Python代码块不使用大括号,Python最具特色的就是用缩进来写模块,缩进相同的一组语句构成一个代码块,我们称之代码组 # 像if、while 、def和class等首行以关键字开始,以冒号结束,该行之后的一行或多行代码构成"代码组" # 我们将首行及后面的代码组称为一个"子句"(clause)缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行!!! # 例如: # if expression: # suite # 代码组 # elif expression: # suite # else: # suite # 例如:(注意:没有严格缩进,在执行时会报错)。通过coding属性支持中文(在不支持中文时,加上该句) # 下面代码会报缩进错误IndentationError # # !/usr/bin/python # # -*- coding: UTF-8 -*- # if True: # print("aaa") # print("True") # else: # print("bbb") # print("False") # 注意缩进,只要对齐就行,至于用空格还是用tab对齐没区别 # 注意:有些环境下,tab和空格不可以混用,有些环境下可以,因此建议在每个缩进层统一使用。'单个制表符'、'两个空格'或'四个空格',尽量不要混用,以避免不必要的麻烦 # while count = 0 while count < 10: # while (count < 10) : #也可以 print('The count is:', count) count = count + 1 # while … else …:循环条件为false时,执行else语句块,只执行一次 count = 0 while count < 5: print(count, " is less than 5") count = count + 1 else: print(count, " is not less than 5") # continue i = 1 while i < 10: i += 1 if i % 2 != 0: # 非双数时跳过输出 continue print(i) # 输出双数2、4、6、8、10 # break i = 1 while True: print(i) i += 1 if i > 10: # 当i大于10时跳出循环 break # for for letter in 'Python3': print('当前字母 :', letter) names = ['xzw', 'Eric', 'Josie'] for name in names: print('当前姓名 :', name) # 通过序列索引迭代 names = ['xzw', 'Eric', 'Josie'] for index in range(len(names)): # for index in range(3): #效果相同,即(1,2,3) print('当前姓名 :', names[index]) # for ...else for num in range(2, 10): # 迭代 2 到 10 之间的数字 for i in range(2, num): # 根据因子迭代 if num % i == 0: # 确定第一个因子 j = num / i # 计算第二个因子 print('%d 等于 %d * %d' % (num, i, j)) break # 跳出当前循环 else: # 循环的 else 部分 print(num, '是一个质数') # pass:pass语句不做任何事情,一般用做占位 for letter in 'Python': if letter == 'h': pass print('这是 pass 块') else: print('当前字母 :', letter) # 字符串中插入变量: # 方法一: name = 'xzw' sayhello = 'Hello,' + name print(sayhello) # 方法二:字符的格式化功能% s代表字符串, % d代表整数 ,都代表在字符中的占位符,变量的位置与字符串中的占位是一一对应关系 name = 'xzw' age = 22 sayhello = 'my name is %s ,and my age is %d ' % (name, age) print(sayhello) # 方法三:通过的字符串的format方法 sayhello = 'my name is {0},and my age is {1} ' print(sayhello.format('xzw', 22)) # 文件的读写操作: # 读文件: f = open('C: est.txt', 'r') print(f.read()) f.close() # 写文件: f = open('C: est.txt', 'w') # w是覆盖 , a追加写入 f.write('hello python!!!') f.close() # 写入的数据如果不关闭连接,数据可能还在内容中 # 生成器 # 列表 :python中列表内存储的数据类型可以不一样,列表可以动态的扩展长度使用[]表示一个列表 # 基本操作: list = [12, 'xzw', 1.1, 'Eric', 111] print(list[0]) print(list[-1]) list[0] = 13 print(list) list.append(100) list.extend([20444555, 440]) list.insert(1, 'str') list.pop() print(list) # 列表的切片: print(list[0:3]) # 左闭右开 print(list[:3]) print(list[-3:-1]) # 左闭右开 print(list[-3:]) print(list[0:99]) list = list(range(1, 100)) print(list) print(list[10:20]) print(list[0:10:3]) print(list[::5]) print(list[::]) # 列表生成式 # 方法一: L = [] for i in range(1, 10): L.append(i * i) print(L) # 方法二(列表生成式): list = [x * x for x in range(1, 10)] print(list) list = [x * x for x in range(1, 10) if x % 2 == 0] print(list) # 生成器generator:通过列表生成式可以直接生产一个列表,元素都以计算出。如果一个列表元素非常多,直接计算出结果会产生oom。生成器可以解决: # 生成器没有直接计算出列表中元素的值,而是保存了计算算法,每次调用生成器时才会进行一次计算,而不是直接计算全部的值,生成器的类型是generator类型 # 列表生成式结果是list列表类型 # 创建生成器: # 方法一: list = (x * x for x in range(1, 10) if x % 2 == 0) print(list) print(type(list)) # 方法二: # 在函数中有yield关键字声明,则该函数最终返回结果是生成器 list = range(1, 10) def getSquare(list): for i in list: temp = i * i yield temp # 使用yield关键字,函数变为了生成器 print(getSquare(list)) # 生成器的取值: # 方法一:每使用next方法调用一次,就会计算一次并返回计算结果 print(next(getSquare(list))) print(next(getSquare(list))) print(next(getSquare(list))) print(next(getSquare(list))) # 方法二:生成器也是一个可迭代对象,所以可以使用for进行迭代 for x in getSquare(list): print(x)
文章存档
热门标签
机器学习基础之Python的基本语法
最新评论查看所有评论>>