栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础

佛曰:

写字楼里写字间,写字间里程序员;

程序人员写程序,又拿程序换酒钱。

酒醒只在网上坐,酒醉还来网下眠;

酒醉酒醒日复日,网上网下年复年。

但愿老死电脑间,不愿鞠躬老板前;

奔驰宝马贵者趣,公交自行程序员。

别人笑我忒疯癫,我笑自己命太贱;

不见满街漂亮妹,哪个归得程序员?

噢耶!!!

一、基础入门

1 注释

# 单行注释"""	多行注释 """

2 变量

①变量的分类和声明

在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开发者主动的

去说明它的类型,系统会自动辨别。也就是说在使用的时候,变量没有类型,数据才有类型

# 变量的使用a = 20b = 12.0

②type()查看变量的数据类型

# 使用type()来检测变量的类型a = 20b = 20.0c = 1 + 5jd = 'hello world'e = Trueprint(type(a))print(type(b))print(type(c))print(type(d))print(type(e))

③命名规范

  1. 标识符由字母、下划线和数字组成,且数字不能开头。

  2. 严格区分大小写。

  3. 不能使用关键字。

Python的命令规则遵循PEP8标准 - 用下划线“_”来连接所有的单词,比如send_buf.

④关键字

⑤类型转换

常用的几个

补充:chr():将整数转换为该编码对应的字符串(一个字符)

​ ord():将字符串(一个字符)转换为对应的编码(整数)

代码演示

# 类型转换a = '2'b = 30c = 1d = ""l = (29, 230, 23)f = '[20, 34, 25, 342]'print(eval(f))      # 将一个对象转换为原来的数据类型,结构就是list类型print(list(l))      # 将一个系列转化为列表print(int(a))       # 2print(float(a))     # 2.0print(str(b))       # 30print(bool(c))      # Trueprint(chr(b))       # RSprint(ord(d))       # 30

3 运算符

python的是逻辑与、逻辑非和逻辑非分别是and、or、not

三目元算符(三元运算符)

值1 if 表达式 else 值2 --> 如果if里面是true就输出值1,相反输出值2

print('aaa') if 1 == 1 else print('23243')  # 输出aaa

二、流程控制语句

python没有switch

1 for和range

range 可以生成数字供 for 循环遍历,它可以传递三个参数,分别表示 起始、结束和步长

  • 起始值默认为0
  • 步长为负数是递减,正数是递增
  • 步长默认为1
  • 不包括结束值,比如 起始0、结束10,那么就是循环9次

代码演示

# 用for循环来遍历# 小于结束值,步长不写默认为1for x in range(0, 10):    print(x)

练习

# 循环练习"""    *    **    ***    ****    *****"""# input方法返回值是字符串类型row = int(input("请输入行数"))for i in range(row):    for j in range(i + 1):        # print函数会自动换行,end=表示结尾是什么,比如end=';',那么最终输出的就会以 ; 结束        print('*', end='')    print()        '''    *   **  *** *********'''row = int(input("请输入行数"))for i in range(row):    for j in range(row - 1 - i):        print(" ", end='')    for j in range(i + 1):        print("*", end='')    print()        """    *   ***  ***** ****************"""row = int(input("请输入行数"))for i in range(row):    for _ in range(row - 1 - i):        print(' ', end='')    for _ in range(2 * i - 1):        print('*', end='')    print()

2 while

# 玩转whilea = Trueb = 1000c = 1while(a):    if c > b:        print('程序结束')        break    print(c)    c += 1

三、高级数据类型

1 字符串

① 字符串的写法

# 字符串的写法str = "孔某是傻逼"# 这里要注意一下,我们输入空格的话,它输出的时候会连空格一起输出str2 = """孔某是某靓仔智的儿子孔某本身也是个傻逼"""print(str)print(str2)

字符串中使用(反斜杠)来表示转义

例如:n不是代表反斜杠和字符n,而是表示换行;而t也不是代表反斜杠和字符t,而是表示制表符。所以如果想在字符串中表示'要写成',同理想表示要写成\。

# 转义字符str3 = ''helloWorld''  # 输出的结果 'helloWorld'str4 = '\helloWorld\'  # 输出的结果 /helloWorld/print(str3)print(str4)

在后面还可以跟一个八进制或者十六进制数来表示字符

例如:141和x61都代表小写字母a,前者是八进制的表示法,后者是十六进制的表示法。也可以在后面跟Unicode字符编码来表示字符,例如u5c0fu667a代表的是中文“小智”。

# 转义字符后面跟八进制和十六进制str5 = '141142143x61x62x63'str6 = 'u5c0fu667a'print(str5, str6)

在字符串前面加r,就不会转义

# 让不转义str7 = r''abcd''str8 = r'n\'print(str7, str8,end='')     # 结果显示'abcd' n\

② 字符串的运算符

  • +运算符来实现字符串的拼接
  • *运算符来重复一个字符串的内容,
  • in和not in来判断一个字符串是否包含另外一个字符串(成员运算),
  • []和[:]运算符从字符串取出某个字符或某些字符(切片运算)

代码演示

# 字符串运算符的使用str = 'hello'str2 = 'world'# + 字符串拼接str3 = str + str2print(str3)# in 来判断字符串中是否含有对应的字符,not in相反boo1 = 'he' in strboo2 = 'si' in strprint(boo1, boo2)   # True False# 通过[]和[:]取出对应的字符# [起始:结束] --> 包含起始,不包含结束str4 = 'asfdsfsd'print(str4[2])      # fprint(str4[2:4])    # fd# 也可以这样表示 --> [起始:结束:步长]print(str4[2::4])   # fsprint(str4[::2])    # afssprint(str4[6::-3])  # sda# 起始值为负数,从后面数起,不包括起始位置的值print(str4[-4:-1])  # sfs

③ 格式化输出字符串

# 字符串的格式化a, b = 5, 10print('%d * %d = %d' % (a, b, a * b))# 也可以使用{下标}占位a, b = 5, 10print('{0} * {1} = {2}'.format(a, b, a * b))# 使用f'表达式'来输出a, b = 5, 10print(f'{a} * {b} = {a * b}')

④ 字符串函数的使用

# 字符串函数的使用str = 'hello,world'# 计算字符串的长度print(len(str))# 得到字符串首字母大写的拷贝print(str.capitalize())     # Hello,world# 得到每个单词首字母大写字符串的拷贝print(str.title())  # Hello,World# 得到全部大写字符串的拷贝print(str.upper())# 得到全部小写字符串的拷贝print(str.lower())# 查找字符在字符串的索引值print(str.find('or'))       # 7print(str.find('str'))      # 没找到返回-1# print(str.index('or'))    ## print(str.index('str'))   # 没找到会报错,慎用# 返回字符串中字符出现的次数print(str.count('o'))print(str.count('o', 1, 5))# 检查字符串是否以指定的字符开头,是返回true,否者返回falseprint(str.startswith('He'))     # Falseprint(str.startswith('hel'))    # trueprint(str.startswith('hel', 0, 3))# 检查字符串是否以指定的字符结束print(str.endswith('he'))       # Falseprint(str.endswith('world'))    # True# 将字符串以指定的宽度居中并在两侧填充指定的字符print(str.center(20, '*'))  # *******************hello,world********************# 将字符串以指定的宽度靠右放置左侧填充指定的字符print(str.rjust(20, '*'))   # ***************************************hello,world# 将字符串以指定的宽度靠左放置左侧填充指定的字符print(str.ljust(20, '*'))str2 = 'abc123456'# 检查字符串是否由数字组成print(str2.isdigit())# 检查字符串是否由字母组成print(str2.isalpha())# 检查字符串是否由字母和数字组成print(str2.isalnum())str3 = '   23423   @qq.com   '# 获取去除字符串前后空格的拷贝,中间的空格是不会被去除的print(str3.strip())print(str3.lstrip())    # 去除左边的print(str3.rstrip())    # 去除右边的# 字符串替换后的拷贝,参数1是target,参数2是要进行替换的字符,第3个参数是要替换多少个print(str3.replace('234', '113', 2))# 字符串的切割list1 = str3.split('   ')# 字符串合并print('-'.join(list1))# 判断是否全是空白str4 = '   'print(str4.isspace())print(str.isspace())

2 列表

就是数组

01 快速入门

# 列表入门salary = [1000, 20000, 3000, 50000]length = len(salary)# 第一种遍历方式 --> 通过下角标获取元素for index in range(length):    print(salary[index])# 第二种遍历方式 --> 直接遍历元素for elem in salary:    print(elem)# 第三种遍历方式 --> 通过enumerate函数可以将下标和元素一起遍历出来for index, elem in enumerate(salary):    print(index, elem)

补充

list2 = salary * 2print(list2)    # [1000, 20000, 3000, 50000, 1000, 20000, 3000, 50000]

02 列表的增删改查

① 添加和插入

# 添加和插入元素list = [2, 34, 22, 54]# 直接在末尾处添加一个元素list.append('理解')# 插入指定位置,如果插入位置大于或者等于数组长度,那么就会插入到最后位置list.insert(12, '小智')for elem in list:    print(elem)

② 合并

# 合并两个列表list = [1, 34, 35, 32]list2 = [3, 343, 22, 21]list.extend(list2)  # list2会追加到list1后list2 += [34, 23, 34]   # 这种方式也是可以的print(list)print(list2)

③ 删除

# 删除元素list = [1, 2, 3, 4, 4, 3]# remove移除对应的元素,并不是移除对应下角标的元素if 4 in list:   # 如果4在这个列表中存在,那么就移除    list.remove(4)if 1234 in list:    # 不存在的数据就不会移除    list.remove(1234)print(list)# pop是移除指定下角标的元素list.pop(3)print(list)# 清空整个列表list.clear()print(len(list))    # 0

④ 切片

# 列表切片list1 = ['xiaozhi', 'heigui', 'goumo','niuniu']print(list1[1::])       # ['heigui', 'goumo', 'niuniu']print(list1[::-3])      # ['niuniu', 'xiaozhi']print(list1[1:4:2])     # ['heigui', 'niuniu']print(list1[-3:3:1])    # ['heigui', 'goumo']

03 列表的排序

# 列表的排序list1 = [23, 34, 22223, 2]list1.sort()    # 将列表正序排序list11 = [23, 34, 22223, 2]list11.sort(reverse=True)print(list1)print(list11)list2 = ['yasdff', 'bcsdf', 'yadf', 'sdfsdfsd']list3 = sorted(list2)           # 根据字符串的首字母按字母表的顺序排序list4 = sorted(list2, key=len)  # 有ken=len就是按照字符串长度来进行排序list5 = sorted(list2, reverse=True)     # reverse=True就是逆序print(list3)print(list4)print(list5)

04 生成式和生成器

import sys# 生成式和生成器# 第一种方式 --> 这个接收的变量名要一致f1 = [ x for x in range(1, 10)]print(f1)# +号在这里是连接的作用,比如 1 + 2 = 12# 下面的例子是嵌套循环,要注意f2 = [x + y for x in 'ABCDE' for y in '1234567']print(f2)# **的作用就是次方f3 = [x ** 2 for x in range(1, 1000)]print(f3)# 查看占用的字节数,和c的sizeof作用一样print(sys.getsizeof(f3))

05 斐波拉切数列

通过yield关键字将一个普通函数改造成生成器函数

# 斐波拉切数列def fib(n):    a, b = 0, 1    for _ in range(n):        a, b = b, a + b        yield adef main():    for val in fib(20):        print(val)if __name__ == '__main__':    main()

3 元组

元祖的使用方式和列表是类似的,但是不同的是元祖不能修改,列表是可以修改的,元祖使用小括号,列表使用方括号

代码实现

# 元组使用t = ('小智', 18, True, '广东')print(t)# 获取元素中的数据print(t[0])print(t[3])# 遍历元组for elem in t:    print(elem)# 将元组转列表print(type(t))print(type(list(t)))f_list = ['service', 'yoy', 'got']print(type(tuple(f_list)))

元组列表的比较

  • 元组不能修改,所以如果需要固定数据的话可以使用元组

  • 元组的占用内存是比列表要少的

    # 元组和列表的比较import syst = (1, 2, 3)l = [1, 2, 3]# 列表的内存时比元组占用的要多print(sys.getsizeof(t))     # 72print(sys.getsizeof(l))     # 88
  • 元组如果修改的话会报错,这个要注意一下

4 集合

Python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算

集合是无序的,所以不能通过下角标来取值,同时还去重

①入门

# 集合入门set1 = {1, 3, 32, 2, 3}print(set1)     # 不会输出重复的数# 是一个的情况可以不适用占位符print('Length=', len(set1))# 创建集合的构造器语法set2 = set(range(1, 10))set3 = set((1, 2, 3, 4))print(set2, set3)# 创建集合的推导式语法(推导式也可以用于推导集合)set4 = {num for num in range(1, 100) if num % 3 == 0 or num % 5 == 0}print(set4)

②添加和删除

# 集合的添加和删除set1 = {1, 3, 32, 2, 3}set1.add('4')set1.update([11, 12])   # 在最后添加print(set1)# 取出元素,从第一个开始取,取出原集合就没有这个元素了print(set1.pop())# 移除对应元素set1.remove(1)      # 如果不存在对应的数据,那么就会报错 set1.discard(3)     # 移除指定的元素,如果没有对应的数据也不会报错# 上面的功能和下面的功能一样if 4 in set1:    set1.remove(4)print(set1)

③交集并集差集运算

# 集合的交集、并集、差集、对称差运算set1 = {1, 2, 3, 4}set2 = {3, 4, 5, 6}set3 = {1, 2}# 交集的两种写法print(set1 & set2)print(set1.intersection(set2))# 并集的两种做法print(set1 | set2)print(set1.union(set2))# 差集的两种做法print(set1 - set2)  # 就是set2没有的元素print(set1.difference(set2))# 对称差的两种做法print(set1 ^ set2)  # 双方都不一相同的数print(set1.symmetric_difference(set2))# 判断子集和超集   -->    是否包含对方,是返回true,否返回falseprint(set1 >= set2)print(set3 <= set1)

5 字典

键值对容器,类似java的map集合,键和值用’:'隔开

# 字典语法练习# 普通的创建方式 --> 键是要字符串,不能是其他的student = {'01': '小黑', '02': '黑仔', '03': '傻逼孔'}print(student)# 使用构造器的方式来创建student2 = dict(one='小智', two='小锋', three='小黑')print(student2)# 使用zip来将两个序列student3 = dict(zip(['a', 'b', 'c'], '123'))print(student3)# 获取值 --> 通过键来取值print(student['01'])        # 对应的键来取值print(student.get('02'))    # get方法取出# 遍历,键和值一起输出for key in student:    print(f'{key}, {student[key]}')    print('{0},{1}'.format(key, student[key]))    print('%s %s' % (key, student[key]))# 判断是否存在对应的key,存在就取出对应的值if '01' in student:    print(student['01'])# 更新字典中的数据student['01'] = '黑鬼'print(student['01'])# 从字典中取出对应的值,取出之后在字典中就没有了,一次只能取出一个a = student.pop('01')print(student, a)   # 取出指定的key对应的值print(student.popitem())    # 取出第一个# 清空字典student2.clear()print(student2)     # {}

四、函数和模块的使用

01 快速入门

函数的作用就是将重复使用的东西封住起来,使用的时候直接调函数

python中用def关键字定义函数,括号里面是形参,return关键字返回一个值,函数的命名规则和变量名一样

代码演示

# 函数入门# 定义一个求阶乘的函数def fac(num):    result = 1    for n in range(1, num + 1):        result *= n    return result# 调用函数print(fac(3))

02 函数的参数

python 不支持重载,但是它有替代重载的方案

代码演示

# 函数的参数from random import randintdef roll_dice(n=2):    """摇色子"""    total = 0    for _ in range(n):        total += randint(1, 6)    return totaldef add(a=0, b=0, c=0):    """三个数相加"""    return a + b + cdef add2(a, b):    return a + b# 如果没有指定参数那么使用默认值摇两颗色子print(roll_dice())      # 我们直接调用的话,传入的参数就是函数形参的默认值 # 摇三颗色子print(roll_dice(3))     # 有传入形参,那么就使用我们自己的形参print(add())print(add(1))print(add(1, 2))print(add(1, 2, 3))# 传递参数时可以不按照设定的顺序进行传递print(add(c=50, a=100, b=200))print(add2())	#

注意:如果不传入对应的参数就会使用函数默认的参数,前提是定义的参数它是有默认值的,否者就会报错

可变形参

可变形参时元组类型

# 可变形参def add(*args):    total = 0    for n in args:        total += n    return totalprint(add(1, 2, 3, 4, 5))

03 模块化管理

python是没有重载的,所以如果存在两个重名的函数,后面定义的会覆盖前面定义的,所以如果想要起两个同名的参数,那么我们就需要模块化管理,python中每个文件就代表了一个模块

module1.pydef foo():    print("我是moduler1中的foo")    module2.pydef foo():    print("我是moduler2中的foo")    test.py# 模块化测试from module1 import foofoo()   # 我是moduler1中的foofrom module2 import foofoo()   # 我是moduler2中的foo# 注意:后导入的会覆盖前导入的from module1 import foofrom module2 import foofoo()   # 我是moduler2中的foo

也可以通过起别名的方式来区分

test.py# 模块化测试from module1 as m1from module1 as m2m1.foo()m2.foo()

04 全局变量和局部变量

函数外的就是全局,函数内的就是局部

# 全局变量和局部变量def foo():    b = 'hello'    # Python中可以在函数内部再定义函数    def bar():        c = True        print(a)        print(b)        print(c)    bar()    # print(c)  # NameError: name 'c' is not definedif __name__ == '__main__':    a = 100    # print(b)  # NameError: name 'b' is not defined    foo()

局部变量内修改全局变量

def foo():    global a	# global声明的变量就是全局变量,如果全局作用域中没有a,那么下面一行的代码就会定义变量a并将其置于全局作用域    a = 200		# 如果没有global关键字,那么它其实就是一个局部变量,全局变量a不会被修改    print(a)  # 200if __name__ == '__main__':    a = 100    foo()    print(a)  # 200

05 函数帮助文档

help(想知道的方法):得到对应方法的帮助文档

五、面向对象

注意:后导入的会覆盖前导入的

from module1 import foo
from module2 import foo

foo() # 我是moduler2中的foo

也可以通过起别名的方式来区分```pythontest.py# 模块化测试from module1 as m1from module1 as m2m1.foo()m2.foo()

04 全局变量和局部变量

函数外的就是全局,函数内的就是局部

# 全局变量和局部变量def foo():    b = 'hello'    # Python中可以在函数内部再定义函数    def bar():        c = True        print(a)        print(b)        print(c)    bar()    # print(c)  # NameError: name 'c' is not definedif __name__ == '__main__':    a = 100    # print(b)  # NameError: name 'b' is not defined    foo()

局部变量内修改全局变量

def foo():    global a	# global声明的变量就是全局变量,如果全局作用域中没有a,那么下面一行的代码就会定义变量a并将其置于全局作用域    a = 200		# 如果没有global关键字,那么它其实就是一个局部变量,全局变量a不会被修改    print(a)  # 200if __name__ == '__main__':    a = 100    foo()    print(a)  # 200

05 函数帮助文档

help(想知道的方法):得到对应方法的帮助文档

五、面向对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/268491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号