人生苦短,我用Python
博客园精华区01-15 23:46

(一)认识Python

  1. Python背景介绍

    Python的格言:

    Life is short,use python. (人生苦短,我用Python。)

    由Guido van Rossum于1989年圣诞节为打发无聊时间,而开发的一个新的脚本解释程序,第一个公开发行版本于1991年。

    至于为什么选中Python作为语言名字,是因为他是一叫Monty Python的喜剧团队的爱好者。

  2. Python的特点

    • 优雅、明确、简单。
    • Python是一个 下限特别低 (少儿编程), 上限特别高 的编程语言(人工智能)。
    • 下限特别低:上手容易,特别适合啥都不懂的小白作为第一门编程语言。通过简单的代码就能做出实用的功能,特别容易培养兴趣。
    • Python 语法简洁 , 表达能力强 。
    • Python 代码量小 ,维护成本低,编程效率高,标准库强大, 第三方库非常丰富 (比如:selenium、appium、requests等),目前已经成为全世界最广泛使用的编程语言之一。
    • 同样的问题,用不同的语言解决,代码量差距多,一般情况下Python是Java的1/5,所以说人生苦短,我用Python,多留点时间做点自己喜欢的事情吧,不要浪费太多时间在编码上面。
    • 解释运行。Python是一种 解释型语言(脚本语言) 。和C/C++不同,不是先将源代码文件转化成可执行文件,再执行,而是直接由Python解释器一行一行的读取源代码,每读一行就执行一行。但严格意义上讲,Python算是一种“半编译,半解释”型语言。一方面,Python解释器会按行读取源代码文件,然后会将源代码转为供Python解释器直接执行的“字节码”,然后再执行字节码。
    • 跨平台 。Python是基于Python的解释器来进行执行。只要某个操作系统/平台上能运行Python解释器,就可以完美的运行Python的源代码。主流的windows、Linux、Mac等操作系统上都能够很好地支持Python。
    • 可扩展性强 。Python可以很容易的调用C/C++语言。如果觉得哪里的逻辑性能不能满足要求,可以使用C/C++重构部分模块,用Python调用。
  3. Python的缺点

    执行效率低
    
  4. Python版本问题

    • Python3虽然是Python2的升级版,但是很多语法并不兼容。
    • 关于兼容性:
      • C++能非常好的兼容C语言(C语言写的代码可以直接使用C++编译器进行编译),但是也意味着C++背负着很多C语言的历史包袱。
      • 但是Python 3 和Python 2 很多地方不兼容(Python 2 写的代码,不能很顺利的在Python 3 的解释器上执行)。
      • 这样做是好还是坏,不便评说,还是要看几年之后的最终结果是好是坏,才能盖棺定论。这样意味着很多已经用Python 2 写好的代码不会很顺利的升级到Python 3.。
      • 但是这样也意味着Python 3 可以不用背负历史包袱,大刀阔斧的把一些不合理的地方修改掉。
      • 官方的说法是,Python 2 最多维护到2020年便停止更新。
  5. 认识Python解释器和PyCharm工具

    • 安装Python解释器

      双击下载好的Python安装包:

      如果未勾选Add Python 3.7 to PATH,需要手动配置环境变量:

      • 计算机->属性->高级系统设置

      • 环境变量->系统变量->Path:

      • 将python.exe的路径和pip命令的路径配置到Path中:

        D:\Python3

        D:\Python3\Scripts

      • 在cmd命令下输入python,验证是否配置成功:

    • PyCharm(集成开发工具)

    • PyCharm是一个相当优秀的Python IDE。不过是付费软件,可以网上找注册码,或者淘宝网买一个破解插件。

    • 在PyCharm中左下角找到Python Console点击进入Python控制台。

PyCharm相关使用和设置:

(二)快速入门

:baby: 变量赋值

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/14 20:24 # 变量和赋值
# 动态类型 type(变量)
# Python中的变量不需要声明,直接定义即可使用。会在初始化的时候决定变量的“类型”
# 使用 = 来进行初始化和赋值操作
counter = 0
miles = 1000.00
name = "poo-poo-cai"
kilometers = 1.666 * miles
print(counter, miles, name, kilometers) # Python中也支持增量赋值
n = 10
n = n * 10 # 100
n *= 10 # 1000
print(n) # 但是Python中不支持 ++/-- 这样的自增、自减操作,只能写成:
n += 1 # n = n + 1 == 1001
print(n) # 运行结果:
# 0 1000.0 poo-poo-cai 1666.0
# 1000
# 1001

标准数据类型

Python3中有 六个 标准的数据类型: 数字、字符串、列表、元组、字典、集合 。

:nut_and_bolt: Number(数字)

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 13:39 # Number(数字)
# Python没有int,float这样的关键字,但是实际上数据的类型是区分int,float这样的类型的;
# Python3支持int(长整型)、float、bool、complex(复数);
# 内置函数type()可以用来查询变量所指的对象类型。 a = 1
print(type(a))
b = 0.1
print(type(b))
c = True
print(type(c))
d = 10 + 5j
print(type(d)) # 此外,还可以用insinstance来判断
num = 222
result = isinstance(num, int)
print(result) # 布尔值表示真(True)和假(False)
# 布尔类型的变量,也是一种特殊的整数类型,在和整数进行运算时,True被当做1,False被当作0
b1 = True
sum = b1 + 2
print(sum) # 3

:strawberry: String(字符串)

字符串基础应用:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 13:54 # Python中可以使用单引号(')、双引号(")、三引号('''/""")来表示字符串;
str1 = 'caituotuo'
str2 = "caituotuo"
str3 = """caituotuo"""
str4 = '''caituotuo'''
print(str1, str2, str3, str4) # caituotuo caituotuo caituotuo caituotuo # 字符串中含有引号
str5 = 'I am "caituotuo"'
print(str5) # I am "caituotuo" # 同时使用反斜杠 \ 转义特殊字符,如:换行符 \n
name = 'My name is \n cai.'
print(name)
# 运行结果:
# My name is
# cai. # \ 本身需要 \\ 这样的方式来表示
str6 = '\\index\\'
print(str6) # \index # 使用索引操作符[]或者切片操作符[:]来获取子字符串。(切片操作是一个前闭后开区间)
# 字符串的索引规则:第一个字符索引是0,最后一个字符索引是-1。
str7 = 'hello world!'
print(str7[0]) # h
print(str7[-1]) # !
print(str7[1:3]) # el
print(str7[:3]) # hel
print(str7[3:]) # lo world!
print(str7[:]) # hello world!
print(str7[::2]) # hlowrd
print(str7[::-1]) # !dlrow olleh # +用于字符串连接运算;* 表示赋值当前字符串,与之结合的数字为复制的次数。
str8 = 'tester'
str9 = 'cai'
print(str8 + str9) # testercai
print(str8 * 1) # tester
print(str8 * 0) # 空
print(str8 * 3) # testertestertester
print(str8 * -1) # 空 # Python没有“字符类型”这样的概念,单个字也是字符串。
str10 = 'tester'
print(type(str10[0])) # <class 'str'> # 格式化字符串:%s; 格式化整型:%d
name = 'caituotuo'
num = 1
print('尊敬的%s用户,您抽到的码号是%d' % (name, num)) # 尊敬的caituotuo用户,您抽到的码号是1 # 内建函数len获取字符串的长度
str11 = 'hello world!'
print(len(str11)) # 12 # 原始字符串(raw strings)
print(r'/n hello /n world!') # /n hello /n world!

字符串合并和拆分:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 15:25 # 字符串合并和拆分
# 将列表中的字符串合并成一个字符串
b = "-"
a = ["wel", "come", "to", "beijing"]
print(b.join(a)) # wel-come-to-beijing # 按空格将字符串拆分成列表
# 应用:接口自动化测时候,批量获取csv文件中的username,password
c = "he ll o wor l d !"
print(c.split(" ")) # ['he', 'll', 'o', 'wor', 'l', 'd', '!']

字符串常用函数:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 15:33 # 字符串常用函数
# 判定字符串的开头结尾,返回布尔值
a = "hello world. my name is poo poo cai"
print(a.startswith("he"))
print(a.endswith("cai"))
print(a.startswith("cai"))
# 运行结果:
# True
# True
# False # strip()去除字符串开头结尾的空格/换行符
b = " welcome to my house \n "
print(b)
print(b.strip(), end="---")
# 运行结果:
# welcome to my house
#
# welcome to my house--- # 查找子串
c = "hello world!"
print("\n")
print(c.find("wor")) # 6 返回下标,下标从0开始
print(c[6]) # w
print(c.find("123")) # -1 表示没有找到 # 替换子串(字符串是不可变对象,只能生成新字符串)
d = "welcome to my house!"
print(d.replace("house", "home")) # welcome to my home!
print(d) # welcome to my house! # 判定字符串是字母还是数字
# str.isalpha()如果字符串至少有一个字符并且所有字符都是字母,则返回True
# str.isdigit()如果字符串只包含数字则返回True,否则返回False
e = "123456"
f = "abc"
g = "123abc"
print(e.isalpha())
print(e.isdigit())
print(f.isdigit(), f.isalpha(), g.isdigit(), g.isalpha())
# 运行结果:
# False
# True
# False True False False

⚜️ List(列表)/Tuple(元组)

列表和元组基础应用:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/7 18:13 # 列表和元组类似于C语言中的数组,使用[]来表示列表,用()来表示元组。
# 对象有序排列,通过索引读取,下标从0开始,最后一个下标为-1。
# 能保存任意数量、任意类型的Python对象,可以是数字、字符串、元祖、其他列表、字典。
a_list = [1, 3.666, [1, 2, 3], {"name": 20, 20: 10}, 4, (1, 2, 3, 4), "string", True]
print(a_list, type(a_list))
print(a_list[0], a_list[-1]) a_tuple = (1, 2, 3, 4)
print(a_tuple, type(a_tuple)) # 运行结果:
# [1, 3.666, [1, 2, 3], {'name': 20, 20: 10}, 4, (1, 2, 3, 4), 'string', True] <class 'list'>
# 1 True
# (1, 2, 3, 4) <class 'tuple'>
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 11:26 # 可以使用[:]切片操作得到列表或元组的子集。这个动作和字符串操作是一样的。
a_list = [1, 3.666, [1, 2, 3], {"name": 20, 20: 10}, 4, (1, 2, 3, 4), "string", True]
print(a_list[0:2]) # 从0索引开始,取两个 [1, 3.666]
print(a_list[:]) # [1, 3.666, [1, 2, 3], {'name': 20, 20: 10}, 4, (1, 2, 3, 4), 'string', True]
print(a_list[::-1]) # 反转 [True, 'string', (1, 2, 3, 4), 4, {'name': 20, 20: 10}, [1, 2, 3], 3.666, 1] a_tuple = (1, 2, 3, 4)
# 列表和元组唯一的区别是:列表中的元素可以修改,但是元组中的元素不能修改。
a_list[0] = 0
print(a_list) # [0, 3.666, ...] # a_tuple[0] = 0 # TypeError: 'tuple' object does not support item assignment # 理解元组的不可变
# 元组的不可变指的是元组元素的id不可变。就是说一个元组包含了几个对象,
# 然后不可以给这几个元组再添加或者删除其中的某个对象,
# 也不可以将某个对象改成其他的对象。
# 但是,如果元组中的某个元素是可变对象(比如列表或字典),那么仍然可以修改。
a_tuple02 = (1, 2, [1, 2, 3, 4])
print(a_tuple02) # (1, 2, [1, 2, 3, 4])
a_tuple02[2][0] = 0
print(a_tuple02) # (1, 2, [0, 2, 3, 4])
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 12:32 # 排序
# sorted()排序:这是一个非常有用的函数,返回一个有序的序列(输入参数的副本)
a_list = [1, 5, 2, 3, 80, 55, 66]
a_list02 = sorted(a_list) # 不会破坏原本的列表,而是自己生成一个排序后的新列表
print(a_list) # [1, 5, 2, 3, 80, 55, 66]
print(a_list02) # [1, 2, 3, 5, 55, 66, 80] # sorted()支持自定义排序规则
# 逆序排序
print(sorted(a_list, reverse=True)) # [80, 66, 55, 5, 3, 2, 1]
# 按字符串的长度排序
a_list03 = ["abc", "name", "u"]
print(sorted(a_list03, key=len)) # ['u', 'abc', 'name'] # sort()排序,会改变列表本身
a_list04 = [1, 5, 2, 6]
print(a_list04) # [1, 5, 2, 6]
a_list04.sort()
print(a_list04) # [1, 2, 5, 6]

列表常用操作:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 16:12 # append():追加元素
a_list = [1, 2]
a_list.append(3)
print(a_list) # [1, 2, 3] # 删除指定下标元素
a_list02 = [6, 5, 4, 3, 2, 1]
del a_list02[0]
print(a_list02) # [5, 4, 3, 2, 1] # remove()按值删除元素
a_list02.remove(3)
print(a_list02) # [5, 4, 2, 1]
# a_list02.remove("1") # ValueError: list.remove(x): x not in list 删除不存在的值会提示not in # 列表比较操作:==/!= 判定所有元素都相等,则认为列表相等。
# < > <= >= 则是两个列表从第一个元素开始依次比较,直到某一方胜出。
a = ["abc", 1233]
b = ["xyz", 789]
c = ["abc", 823]
print(a < b)
print(b < c)
print(b > c and a == c) # 运行结果
# True
# False
# False
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 16:58 # 删除列表中指定的值(全部删除)
# 删除列表中所有的2
a_list = [1, 2, 2, 3, 5, 2, 2, 8, 9, 2]
n = len(a_list)
new_list = []
for i in range(0, n):
if a_list[i] == 2:
pass
else:
new_list.append(a_list[i])
print(a_list)
print(new_list)
# 运行结果:
# [1, 2, 2, 3, 5, 2, 2, 8, 9, 2]
# [1, 3, 5, 8, 9]

:question:列表和元组的区别?(面试题)

①列表和元组唯一的区别是:列表中的元素可以修改,但是元组中的元素不能修改。

②理解元组的不可变(子元素不可改,若子元素是一个列表那么列表里面的内容可以改)
# 元组的不可变指的是元组元素的id不可变。就是说一个元组包含了几个对象,
# 然后不可以给这几个元组再添加或者删除其中的某个对象,
# 也不可以将某个对象改成其他的对象。
# 但是,如果元组中的某个元素是可变对象(比如列表或字典),那么仍然可以修改。

:seat: Set(集合)

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 12:56 # 集合(set)是一个无序的不重复元素序列。
# 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { }是用来创建一个空字典。 # 创建格式:
a_set = {50, 20, 20}
print(a_set) # {50, 20}
value = {50, 20, 20}
a_set02 = set(value)
print(a_set02) # {50, 20} basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'apple', 'orange', 'banana', 'pear'}这里演示的是去重功能 print('orange' in basket) # True 快速判断元素是否在集合内
print('crabgrass' in basket) # False # 下面展示两个集合间的运算.
a = set('name')
b = set('username')
print(a) # {'n', 'a', 'm', 'e'}
print(b) # {'m', 's', 'r', 'n', 'a', 'u', 'e'}
print(a - b) # set()空集合 集合a中包含而集合b中不包含的元素 print(a | b) # {'m', 'a', 's', 'u', 'r', 'e', 'n'} 集合a或b中包含的所有元素 print(a & b) # {'m', 'a', 'e', 'n'}集合a和b中都包含了的元素 print(a ^ b) # 'r', 's', 'u'} 不同时包含于a和b的元素

:diamond_shape_with_a_dot_inside: Dictionary(字典)

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 14:59 # 字典是Python中的映射数据类型,存储键值对(key:value),无序(3.7有优化,相对有序,按输入的顺序显示)
# 几乎所有类型的Python对象都可以用作键。不过一般是数字和字符串最常用,且key不能重复。
# 使用{}表示字典。 a_dic = {'name': 'poo-poo-cai', 'age': 21} # 创建字典
print(type(a_dic)) # <class 'dict'>
print(a_dic["name"]) # poo-poo-cai 取字典中的元素
a_dic['name'] = "蔡坨坨" # 修改值
print(a_dic["name"]) # 蔡坨坨
a_dic["address"] = "福建" # 插入新的键值对
print(a_dic["address"]) # 福建 # 删除某一个键值对,del
del a_dic['address']
print(a_dic) # {'name': '蔡坨坨', 'age': 21} # 使用clear()方法,清空整个字典中所有的键值对
a_dic02 = {"username": "007", 7: 8}
print(a_dic02) # {'username': '007', 7: 8}
a_dic02.clear()
print(a_dic02) # {} # 使用pop()方法,删除键值对同时获取到值
a_dic03 = {"age": 20, "habits": "play computer"}
print(a_dic03) # {'age': 20, 'habits': 'play computer'}
habits = a_dic03.pop("habits")
print(a_dic03) # {'age': 20}
print(habits) # play computer
# 注意:字典也是可变对象,但是键值对的key是不能修改的。 # keys():返回一个列表,包含字典的所有key
# values():返回一个列表,包含字典的所有value
# items():返回一个列表,每一个元素都是一个元组,包含了key和value
a_dic04 = {'name': 'poo-poo-cai', 'age': 21, "address": "成都"}
print(a_dic04.keys())
print(a_dic04.values())
print(a_dic04.items())
# 运行结果:
# dict_keys(['name', 'age', 'address'])
# dict_values(['poo-poo-cai', 21, '成都'])
# dict_items([('name', 'poo-poo-cai'), ('age', 21), ('address', '成都')])

输入输出函数

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/7 17:26 # 输入和输出
# print函数,将结果输出到标准输出(显示屏)上
# input函数,从标准输入中获取用户输入
name = input('请输入你的姓名:')
print('你的姓名是:', name)
# 运行结果:
# 请输入你的姓名:cai
# 你的姓名是: cai # input返回的结果只是一个字符串,如果需要获取一个数字,需要使用int函数把字符串转换成数字。
num = input('please input a number:')
print('type:', type(num), end="---") # type: <class 'str'>
num2 = int(num)
print('your number is:', num2, 'type:', type(num2)) # your number is: 20 type: <class 'int'>

注释 & 编码

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/7 17:36 # Python中使用 # 作为单行注释,# 后面的内容都是注释的内容。
a = 1.0 # define a # 查看系统默认编码方式
import sys print(sys.getdefaultencoding()) # 如果要包含中文,默认不是utf-8的话,需要在代码文件最开头的地方注明。
# -*- coding:utf-8 -*-

:cake: 运算符

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/7 17:47 # 操作符
# Python中支持 + - * / % (加、减、乘、除、取余)这样的操作符
a = 1
b = 2
print(a + b) # 3
print(a - b) # -1
print(a * b) # 2
print(a / b) # 0.5
print(a % b) # 1 # // 是地板除,无论操作数类型如何,都会对结果进行取地板运算(向下取整)
print(a // b) # 0 # ** 表示乘方运算
c = 3
print(c ** 3) # 27 # 比较运算符,>、<、==、>=、<=、!= ,返回一个布尔值。
print(2 < 3) # True
print(2 > 3) # False
print(2 == 3) # False
print(2 >= 3) # False
print(2 <= 3) # True
print(2 != 3) # True # 逻辑运算符and、or、not # 字符串之间可以使用== 或者 != 来判断字符串的内容是否相同。
'test' == 'tester' # False
'test' != 'tester' # True # 字符串之间也可以比较大小,这个大小的结果取决于字符串的字典序
# 从小到大 0-9 A-Z a-z
'a' < 'bb' # True

☯️ 对象和变量引用

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 14:51 # 理解引用
# Python中可以用id这个内建函数,查看变量的地址
# 对象的三要素;1.type 2.id 3.value
a = 100
print(type(a), id(a), a)
a = 200
print(type(a), id(a), a)
b = a
print(type(b), id(b), b)
b = 300
print(type(b), id(b), b)
# 运行结果:
# <class 'int'> 140708135988976 100
# <class 'int'> 140708135992176 200
# <class 'int'> 140708135992176 200
# <class 'int'> 2225255404560 300 # 给a重新赋值成200,相当于新创建了一个200这样的对象,然后将变量名a重新绑定到200这个对象上。
# 将a赋值给b,相当于又创建了一个变量名为b的对象,并将b这个名字和200这个对象绑定到一起。
# 再次修改b的值,可以看出其实是又创建了一个300的对象,将b绑定到300这个对象上。
# 像创建的a,b这样的变量名,其实只是一个对象的别名。或者叫做变量的“引用”。

:icecream: 条件判断语句

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 15:07 # if语句
if 2 > 3:
print('dei') # dei # if else
if 2 > 3:
print('dei')
else:
print('bu dei') # bu dei # 非0 || True
if 1:
print('非0') # 非0 if '':
print('非0')
else:
print('空字符串') # 空字符串 if []:
print('非0')
else:
print('空列表') # 空列表 if {}:
print('非0')
else:
print('空字典') # 空字典 x = int(input("please input x's value:"))
y = int(input("please input x's value:"))
if x > 0:
if y > 0:
print('x and y >0')
else:
print('y <= 0')
else:
print('x <= 0')

:white_check_mark: 循环语句

while循环语句:

# while循环
n = 1
while n < 4:
print('这是我循环的第%d次' % n)
n += 1

for循环语句:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 15:31 # for循环
# 循环字符串
name = 'caituotuo'
for n in name:
print(n) # 循环列表
lists = [1, 1.5, True, 5 + 10j, 'cai', (1, 2, 3)]
for list in lists:
print(list) dicts = {'id': 666, 'name': 'caituotuo', 'sex': 'boy'}
for dict in dicts:
print(dict)
for k in dicts.keys():
print(k)
for v in dicts.values():
print(v, end=' ') # 666 caituotuo boy
print('\n')
for k, v in dicts.items():
print(k, end=' ')
print(v, end=' ') # id 666 name caituotuo sex boy print('\n')
for n in range(1, 5): # 左闭右开
print(n)
# 1
# 2
# 3
# 4

常用内置函数/模块(abs、divmod、round、break、continue、pass)

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 15:50 # continue、break、pass
# 查找[1,100)第一个3的倍数
for n in range(1, 100):
if n % 3 == 0:
print(n)
break # 跳出当前循环 for n in range(1, 100):
if n % 3 != 0:
continue # 终止一次循环
print(n)
break if 3 == 3:
pass # 空语句,用来占位
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 17:43 # abs:求一个数的绝对值
a = -20
print(abs(a)) # 20 # divmod:返回一个元组,同时计算商和余数
a, b = divmod(10, 3)
print(a, b) # 3 1 # round:对浮点数进行四舍五入
# round有两个参数,第一个是要进行运算的值,第二个是保留小数点后多少位。
r = round(1.66666, 2)
print(r) # 1.67

使用for生成列表:

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2021/1/15 17:36 # 生成列表
# 使用for循环将生成的值存放到一个列表中
# 生成[0,4)的数字的平方列表
s = [x ** 2 for x in range(4)]
print(s) # [0, 1, 4, 9] # 还可以搭配使用if语句
# 获取[0,8)区间中的所有奇数
e = [x for x in range(8) if x % 2 == 1]
print(e) # [1, 3, 5, 7]

自定义函数&不定长参数

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 16:16 # 函数
# 一些可以被重复使用的代码,可以提取出来放到函数中
# Python使用def来定义一个函数,使用return来返回结果
def add(num=3):
num = num + 1
return num # 调用函数
num = add()
print(num)
num = add(5)
print(num) # 理解“形参”和“实参”:形参相当于数学中的未知数这样的概念。实参就是给未知数确定具体的数值。
# Python中相同名字的函数,后面的会覆盖前面的。
# Python支持默认参数。函数的参数可以具备默认值。
def fun(x=1):
y = x ** 3
z = y + x
return x, y, z # Python解包(unpack)语法,函数返回多个值,但是我只关注z,不想关注x、y,可以使用_作为占位符。
_, _, z = fun(2)
print(z) # 我们实现一个打印日志的函数。这个函数第一个参数是一条日志的前缀,后续可能有n个参数。
# n个参数之间使用\t(tab键)分割。join()方法用于将序列中的元素以指定的字符连接成一个新的字符串。
def log(prefix, *data):
print(prefix + "\t".join(data)) # 调用函数
log('[Notice]', "hello", "world") # [Notice]hello world # 不定长参数
def bdc(*canshu):
print(canshu) bdc(1, 1.5, True, 'hello') # (1, 1.5, True, 'hello') # 通过在参数名前加两个星号,星号后面的部分表示传入的参数是一个字典。
# 这时候调用函数就可以按照键值对的方式传参。
# 成对传参
def chengdu(**kv):
print(kv) chengdu(name='cai', age=21) # {'name': 'cai', 'age': 21}

:zap: 作用域&文档字符串

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/6 16:31 # 作用域
# Python中,def、class会改变变量的作用域
# if else elif while for try 不会改变变量的作用域
# global for i in range(3):
print(i)
print(i) # 即使出了for循环语句块,变量i仍然访问到i变量 def fun(**kv):
"""全局变量"""
global new_kv
new_kv = kv
return kv # 0
# 1
# 2
# 2 kv = fun(name='cai', age=21)
print(kv)
print(new_kv) # {'name': 'cai', 'age': 21}
# {'name': 'cai', 'age': 21} # 文档字符串
# 写注释对于提升程序的可读性有很大的帮助,前面我们介绍了 # 来表示单行注释。
# 对于多行注释。我们可以使用三引号('''/""")在函数/类开始位置表示。这个东西也被称为文档字符串。 def fun():
"""文档字符串""" # 使用对象的doc属性就能看到这个帮助文档
print(fun.__doc__) # 文档字符串
# 或者内建函数help也可以做到相同的效果
help(fun)
# Help on function fun in module __main__:
#
# fun()
# 文档字符串 # 注意:文档字符串一定要放在函数或者类的开始位置,否者上述两个函数无法来访问。

:file_folder: 文件操作

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/9 21:25 # 文件操作
# 使用内建函数 open() 打开一个文件
# handle = open('file_name','r')
#
# 第一个参数file_name是文件的名字,可以是一个绝对路径,也可以是一个相对路径。
# 第二个参数是文件的打开方式,选项有:
# 'r':只读
# 'w':覆盖写
# 'a':追加写 # 方式一(使用相对路径):
handle = open('test.txt', 'r', encoding='utf-8') # 指定编码格式encoding,默认是gbk
# 方式二(使用绝对路径):
# handle = open(r'D:\Desktop\Python_Study\Python_Study\bcbx_test\文件操作\test.txt', 'r', encoding='utf-8') # handle是一个文件句柄,是一个可迭代的对象,可以直接使用for循环按行读取文件内容
for line in handle:
print(line.strip()) # strip()去除空格和换行
# handle使用完毕,需要close掉,否则会引起资源泄露(一个进程能打开的句柄数目是有限的)
handle.close() print(handle.read(3))
# 读取一行,前面如果读过则不会重复读取,自动从未读取部分往下读
print(handle.readline())
# 读取所有行,将结果存储在result中,第一行的索引为0,以此类推
result = handle.readlines()
print(result[0].strip())
handle.close()

:exclamation: 异常

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/9 21:52 # 在我们前面经常提到“程序运行出错”这样的概念。实际上,这是Python解释器抛出了一个异常。
list01 = [1, 2, 3]
try:
print(list01[2]) # IndexError: list index out of range,try except捕获异常,后面程序正常运行 handle = open(r'test02.txt', 'r', encoding='utf-8') # No such file or directory: 'test02.txt'
except Exception as error:
# except IndexError:
print(error)
print(type(error))
if str(error) == 'list index out of range':
print('IndexError')
elif str(error) == "[Errno 2] No such file or directory: 'test02.txt'":
print('FileNotFoundError') # print(list01[3]) # 没有抛异常,后面的程序无法运行 print('成功捕获异常')

:vibration_mode: 模块

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/9 22:13 # 模块
# 当代码量比较大的时候,我们最好把代码拆分成一些有组织的代码片段。
# 每个代码片段里面包含一组逻辑上有关联的函数或类。
# 每一个片段里放在一个独立的文件中。这样的片段就成为模块(module)
# 使用import可以在一个Python文件中引入其他的模块。
# 既然模块也是一个对象,那么可以给这个对象赋值(相当于定义别名)
# 使用import 模块 as 别名 def bubble_sort(ls):
# 检测列表的数据个数
n = len(ls) # n=6
# i为数据排序的轮次
for i in range(n - 1):
# j为列表数据的下标
for j in range(0, n - i - 1):
# 比较相邻两个数的大小
if ls[j] > ls[j + 1]:
# 相邻两个数交换位置
ls[j], ls[j + 1] = ls[j + 1], ls[j]
# 输出排序后的数据列表
print(ls)
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/9 22:13 from c_bcbx.Python基础.模块.test01 import bubble_sort as b b([2, 3, 5, 22, 2, 1, 99, 0, 2]) # [0, 1, 2, 2, 2, 3, 5, 22, 99]

:monkey:Tips:

  • .py文件的命名可以使用数字、字母、下划线。
  • 当文件作为主程序运行时,文件名开头可以随意,以数字,字母,下划线开始都可以,如:666_cai.py,cai.py,_cai666.py,cai1.py,_666cai.py;
  • 但是,当.py文件 作为模块 被导入到其他文件中调用时,则作为模块的.py文件 不能以数字开头命名 ,可以用下划线和字母开头,如:cai.py,_cai666.py,cai666.py,_666cai.py,若命名为666cai.py则会出错。
  • 同理,若作为模块的.py文件位于某个包下,则这个包的命名也不能以数字开头。

:package: 

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/12 22:23 # 包(Package)
# 当我们代码量进一步变大时,光拆分成多个文件已经不足以满足需求,
# 还需要能按照一定的目录结构层次化的组织这些模块,同时包也可以解决模块之间的名字冲突问题。 # 例如,我们可以以下面的方式组织代码结构:
# test.py
# bao_package/
# add.py
# divide.py
# __init__.py
# 在bao_package目录中增加一个__init__.py文件,bao_package这个目录就成了包。
# 可以在test.py中import bao_package中的模块 from c_bcbx.Python基础.包.bao_package import add, divide # 调用add.py文件
add
# 调用divide.py文件
divide # __init__.py 是在包加载的时候会进行执行,负责一些包的初始化操作,一般是空文件即可。

️ 

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/11 21:11 # 类 # 面向对象:封装 # 面向对象-oop是一种编程思想,万物皆对象,面向对象提高了编程效率,重复利用性高,
# 一个对象包含了数据和操作数据的函数。 # 抽象
# 抽象是指对现实世界问题和实体的本质表现、行为、特征进行建模,抽象的反义词是具体。
# 抽象的本质,是抓住我们重点关注的主体,而忽略一些我们不需要关注的细节。
# 写程序也一样,我们不可能把一个现实事物所有的信息都在程序中表示出来,而是只表示我们需要用到的。 # 类和实例
# 类是施工图纸。里面有房子的重要信息(比如:户型、面积、朝向、层高等)
# 实例是造好的房子,房子造好了,才能住进去。
# 通过同一张图纸可以建造出N个相同格局的房子,那么N个实例就都是属于同一个类。 # 创建一个新的类
class Tester:
# 类的特殊方法,__init__方法里面定义的参数在实例化类的时候必须要传参
def __init__(self, house_type):
self.house_type = house_type developer = 'SOHO' def show_price(self, s):
if self.house_type == '洋房':
print('单价30000/每平米')
print('整套的价格是:%d' % (30000 * s))
elif self.house_type == '小高层':
print('单价25000/每平米')
else:
print('单价20000/每平米') # 实例化类
cai = Tester('洋房')
cai.show_price(100)
cai.house_type == '小高层'

转:https://www.tuicool.com/wx/uEfQbyJ

pyhon笔记入门的更多相关文章

  1. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  2. PHP学习笔记 - 入门篇(4)

    PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...

  3. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  4. PHP学习笔记--入门篇

    PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...

  5. LESS学习笔记 —— 入门

    今天在网上完成了LESS的基础学习,下面是我的学习笔记.总共有三个文件:index.html.main.less.mian.css,其中 mian.css 是 main.less 经过Koala编译之 ...

  6. 【C/C++】日期问题/算法笔记/入门模拟

    最近把算法竞赛入门经典的前半部分看完了,开始看算法笔记入门算法. 看了前半部分的例题,很多是算法竞赛入门经典中出现过的,但是感觉这本书写的更适合初学者,而且真的很像考试笔记,通俗易懂. //日期问题 ...

  7. ADO.NET 学习笔记 入门教程

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=57&page=1&extra=#pid63 这是本人在 ...

  8. Dubbo -- 系统学习 笔记 -- 入门

    Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...

  9. Django笔记 —— 入门简介

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

随机推荐

  1. 【LeetCode】142. Linked List Cycle II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 set 日期 题目地址:https://le ...

  2. Hamburger Magi(hdu 3182)

    Hamburger Magi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. 难搞的偏向锁终于被 Java 移除了

    背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 Class 对象 同步块,锁上括号里 ...

  4. 「双串最长公共子串」SP1811 LCS - Longest Common Substring

    知识点: SAM,SA,单调栈,Hash 原题面 Luogu 来自 poj 的双倍经验 简述 给定两字符串 \(S_1, S_2\),求它们的最长公共子串长度. \(|S_1|,|S_2|\le 2. ...

  5. 部署Kubernetes Cluster

    中文学习网站:https://www.kubernetes.org.cn/doc-16 部署docker服务 所有节点部署docker服务 curl -sSL https://get.daocloud ...

  6. laravel源码分析-队列Queue

    laravel 源码分析具体注释见 https://github.com/FX-Max/source-analysis-laravel 前言 队列 (Queue) 是 laravel 中比较常用的一个 ...

  7. games101 - 4 - Ray Tracing

    games101 - 4 - Ray Tracing 目录 games101 - 4 - Ray Tracing 为什么需要Ray Tracing Recursive (Whitted-Style) ...

  8. Pytest_在jenkins中使用allure报告(13)

    一.安装allure插件 点击jenkins管理-->插件管理 点击Available,在搜索框中输入allure并安装 二.配置构建命令 三.构建配置allure插件 点击构建后置操作 pat ...

  9. Nginx_全局命令设置

    刚安装好的Nginx, 命令需要去sbin目录执行,比较麻烦,设置下全局命令,就无需进入nginx的sbin目录执行nginx命令了 1.创建文件 vim /etc/init.d/nginx 把下面代 ...

  10. springboot 配置 swagger2

    1.pom.xml 添加依赖 <!--swagger2 依赖--> <dependency> <groupId>io.springfox</groupId&g ...