【Python】python入门篇

news2024/11/24 6:52:23

概述

官网

https://www.python.org/

Python 是一种脚本语言(scripting language)。

与编译型语言(如 C 和 C++)不同,Python 的程序代码不需要进行显式的编译,在执行时会动态地解释执行代码。

Python 的脚本执行器可以直接解析并执行 Python 代码,无需将代码编译成可执行文件。

Python 脚本语言的特点之一是易于学习和使用。

Python 的语法简单、清晰,具有高度的可读性和可维护性,使得编写 Python 脚本非常方便。

同时,Python 也是一种功能强大、灵活性高的语言,支持多种编程范式,包括面向过程、面向对象和函数式编程等。

Python 脚本语言的另一个优势是跨平台性。

由于 Python 的程序代码不需要进行编译,因此可以在多个操作系统平台上运行,包括 Windows、Linux、macOS 等。

这使得 Python 成为一种广泛应用于软件开发、数据科学、人工智能和网络编程等领域的语言。

Python入门篇

基本语法

代码缩进

缩进4空格=1tab:

在这里插入图片描述

代码注释

# 单行注释

"""
多行注释
多行注释
"""

'''
多行注释
多行注释
'''

python关键字

⚠️ 在命名py文件时,不要与python自有包名一样,否则可能会报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKRLDSkB-1687659109635)(./Python.assets/image-20230324160520881.png)]

import keyword
print(keyword.kwlist)

输出的关键字:

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

引号

在python中可以使用单号号和双引号

print('hello')
print("world")

转义符

print("换行", "1\n2")
print("制表", "1\t2")
print("覆盖", "1\r2")
print("删除", "1\b2")
print("转义符的转义", "1\\2")
print("原字符", r"\n2")
print("原字符", R"\n2")

在这里插入图片描述

变量

Python 的变量是用于存储数据值的标识符(identifier)。

Python 的变量声明非常简单,只需要给变量名赋值即可,无需显式声明变量类型。

Python 的变量名可以是任意长度的字母、数字或下划线的组合,但不能以数字开头。

Python 的变量名区分大小写。

在 Python 中,可以使用 type() 函数查看变量的类型。

需要注意的是,Python 的变量赋值实际上是在内存中创建了一个对象,并将该对象的引用赋值给变量。

因此,在对变量进行操作时,需要注意变量所引用的对象的类型和属性。

空值

算一种数据类型

内置函数是有返回值的,返回值为None

在这里插入图片描述

在这里插入图片描述

数据类型

Python 的数据类型非常灵活,支持动态类型和自动类型转换,使得编写 Python 程序变得非常方便。在编写 Python 程序时,需要根据需要选择合适的数据类型,以便更好地表达数据和实现相应的功能。

Python 有多种数据类型,包括但不限于以下几种:

  1. 数字(Numbers):整数、浮点数、复数等。
  2. 字符串(Strings):表示文本数据。
  3. 列表(Lists):有序集合,可以包含不同类型的元素。
  4. 元组(Tuples):有序集合,类似于列表,但元素不能修改。
  5. 集合(Sets):无序集合,不允许重复元素。
  6. 字典(Dictionaries):键-值对的无序集合,用于表示映射关系。
  7. 布尔值(Booleans):表示真或假两种状态。

除了上述数据类型外,Python 还有一些其他的内置数据类型,例如字节串(Bytes)和字节数组(Bytearrays),以及一些常用的数据结构,例如栈(Stacks)、队列(Queues)、堆(Heaps)等。此外,还可以使用第三方库来引入其他的数据类型,例如 Pandas 中的数据框(DataFrames)和 Numpy 中的数组(Arrays)。

整型(int)

表示整数,如 1、2、3 等。

浮点型(float)

表示浮点数,即带有小数部分的数字,如 1.0、2.5、3.1416 等。

字符串(str)

表示文本数据,用单引号或双引号括起来,如 ‘hello’、“world” 等。

字符串拼接

b = "你好"
c = "人工智能"
d = "openai"
print(b + c + d)

a = ','.join((b, c, d))
print(a)

在这里插入图片描述

格式化,即占位符

百分号%

%s 为字符占位,任意类型都可以

%d 为正数占位,输入小数,会取整数位

%f 为浮点数占位,输入整数,会显示小数位,精度为6

format函数

占位符与传入的数据数量要一致,否则会报错

在这里插入图片描述

name = 'Alice'
age = 30
message = 'My name is %s and I am %d years old.' % (name, age)
message = 'My name is {} and I am {} years old.'.format(name, age)

在这里插入图片描述

F表达式

Python3.6以上支持

大小写F都可以

name = 'Alice'
age = 30
message5 = F'My name is {"李白"} and I am {18} years old.'
message6 = f'My name is {name} and I am {age} years old.'
print(message5)
print(message6)
format进阶用法
元组索引占位
message = 'My name is {1} and I am {0} years old.'.format(name, age)
print(message) # My name is 30 and I am Alice years old.
保留小数位
num1 = 3.1415926
message7 = '圆周率:{:.2f}'.format(num1)
print(message7) # 圆周率:3.14
格式化百分数
num2 = 0.12
message8 = '百分数:{:.2%}'.format(num2)
print(message8) # 百分数:12.00%

字符串常用方法

s = 'hello, world'
print("s:", s)
print("转换为大写字母:", s.upper())
print("转换为小写字母:", s.lower())
print("将第一个字符转换为大写:", s.capitalize())
print("将每个单词的首字母转换为大写:", s.title())
print("是否以'hello'开头:", s.startswith('hello'))
print("是否以'world'结尾:", s.endswith('world'))
print("将所有的'l'替换为'L':", s.replace('l', 'L'))
print("使用','分割字符串为列表:", s.split(","))
print("获取字符串长度:", len(s))
print("查找元素:", s.find("h"))  # 0
print("在指定索引区间查找元素:", s.find("h", 1, 5))  # -1
print("统计元素数量:", s.count("l"))  # 3
print("去除字符串首尾的空格", "111 ".strip())
print("字符串的乘法","李白"*3) #字符串的乘法 李白李白李白

字符串切片

[开始:结尾:步长]

在Python中,可以使用切片操作(slicing)从一个字符串中提取出一个子字符串。

切片操作使用中括号和冒号表示,语法为 [start:stop:step]

其中 start 表示起始索引, stop 表示终止索引, step 表示步长。

注意,起始索引包含在结果中,但终止索引不包含在结果中。即[ ) 取左不取右

如果省略 start,则默认为 0;

如果省略 stop,则默认为字符串的长度;

如果省略 step,则默认为 1。

s = 'Hello, world!'
s[0:5]     # 'Hello'
s[7:12]    # 'world'
s[0:12:2]  # 'Hlo ol'
s[:5]      # 'Hello'
s[7:]      # 'world!'
s[::-1]    # '!dlrow ,olleH',反转字符串

上面的示例中,s[0:5] 提取了字符串 s 中的前 5 个字符,

s[7:12] 提取了字符串 s 中的第 7 个字符到第 12 个字符(不包含第 12 个字符)之间的子字符串。

s[::-1] 则使用了步长为 -1,实现了字符串的反转操作。

需要注意的是,切片操作不会修改原始的字符串,而是返回一个新的字符串。

字符串的比较

old()函数

chr()函数

id()函数

max min函数

比较大小时,字符类型会被转为 ascii码

字符串的编码转换

encode函数

decode函数

字符串的驻留机制

大概类似java Integer缓存?

布尔型(bool)

表示逻辑值,只有两个取值,True 和 False。

布尔值可以转换为数字的,True1 False0

列表(list)

表示一组有序的数据,可以包含任意类型的数据,用中括号括起来,如 [1, 2, 3]、[‘hello’, ‘world’] 等。

定义列表

# 定义list
list1 = [1, 2, 3, 4, 5, "李白", ["香蕉", "苹果", "葡萄"]]
print("输出列表信息:", list1)  # [1, 2, 3, 4, 5, '李白', ['香蕉', '苹果', '葡萄']]
print("列表长度:", len(list1))

访问列表元素

# 通过索引访问list元素
print("索引访问元素:", list1[0], list1[6][2])  # 1 葡萄

列表切片

# 列表切片
print("列表切片:", list1[0:2])  # [1, 2]
print("列表切片:", list1[:2])  # [1, 2]
print("列表切片:", list1[1:])  # [2, 3, 4, 5, '李白', ['香蕉', '苹果', '葡萄']]
print("列表切片:", list1[-2])  # 李白

修改列表元素

list1[5] = '杜甫'
print("修改列表元素", list1)  # [1, 2, 3, 4, 5, '杜甫', ['香蕉', '苹果', '葡萄']]

添加列表元素

list1.append("白居易")
print("添加一个元素", list1)  # [1, 2, 3, 4, 5, '杜甫', ['香蕉', '苹果', '葡萄'], '白居易']

删除元素

remove函数

只会删除匹配到的第一个元素

list1 = [2, 3, 2, 3]
list1.remove(2)
print("remove", list1)  # [3, 2, 3]

list2 = [2, 3, 2, 3]
list2.remove(list2[2])
print("remove", list2)  # [3, 2, 3]
pop函数

删除指定下标元素

list3 = [2, 3, 2, 3]
list3.pop(2)
print("pop", list3)  # [2, 3, 3]
del关键字

使用del关键字删除整个列表

在这里插入图片描述

删除指定元素

在这里插入图片描述

列表排序

list2 = [3, 5, 2]
list2.sort()
print("列表排序", list2)  # [2, 3, 5]

插入列表元素

list2.insert(1, 1)
print("在第二个位置插入值1:", list2)

列表的乘法

list3 = [1, 2, 3]
print("列表的乘法", list3 * 2)  # [1, 2, 3, 1, 2, 3]

多个列表融合

注意:

使用加号运算符或 extend() 方法融合列表时,不会创建新的列表对象,而是将元素添加到原有的列表中。

list4 = [3, 4, 5]
print("列表融合方式一", list3 + list4) # [1, 2, 3, 3, 4, 5]
#list4的末尾添加list3
list4.extend(list3)
print("列表融合方式二", list4) #  [3, 4, 5, 1, 2, 3]

推荐使用extend,节约内存空间

清空列表

list4.clear()
print("清空列表:", list4) # []

index函数

listA = ["李白", "杜甫", "白居易"]
print("查找元素所在索引", listA.index("李白")) # 0
print("在索引区间,查找元素所在索引", listA.index("李白", 1, 2)) # 报错了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXSYe4VT-1687659109635)(Python.assets/image-20230326204243476.png)]

reverse函数

反转

listA = ["李白", "杜甫", "白居易"]
listA.reverse()
print(listA) # ['白居易', '杜甫', '李白']

copy函数

list拷贝函数

listA = ["李白", "杜甫", "白居易"]
listB = listA.copy()
print("列表复制", listB) # ["李白", "杜甫", "白居易"]

listB = listA
#这么赋值,等于listA listB仍然指向同一个对象

count

用于统计某个元素在列表中的数量

元组(tuple)

与列表类似,但是元组是不可变的,用小括号括起来,如 (1, 2, 3)、(‘hello’, ‘world’) 等。

元组的元素是不是被修改的,

但元组中的元素对象中的值是可以修改的,比如元组中的List对象,可以修改List元素中的值

元组定义

tupleA = (1, 2, 3)
print(type(tupleA)) # <class 'tuple'>

#也可以不加括号
tupleC = 1, 2, 3
print(type(tupleC)) # <class 'tuple'>

#但是只有一个元素时,需要加逗号,否则就不是元组类型了
tupleE = (1)
print(type(tupleE)) # <class 'int'>
#应该这么写
tupleE = (1,)
print(type(tupleE))

元组的拼接

与list用法一样

tupleA = (1, 2, 3)
print(type(tupleA))
tupleB = (1, 2, 3)
print(tupleB+tupleA) # (1, 2, 3, 1, 2, 3)

集合(set)

集合(Set)是 Python 中的一种无序、可变的容器,其中每个元素都是唯一的(即不重复)。

集合可以用来进行数学上的集合运算,比如交集、并集、差集等。

表示一组互不相同的数据,用大括号括起来,如 {1, 2, 3}、{‘hello’, ‘world’} 等。

集合定义

setA = {1, 2, 2, 3}
print(type(setA))  # <class 'set'>
print(setA)  # {1, 2, 3}

# 使用set函数创建集合
setB = set("12312")
print(setB)  # {'3', '1', '2'}

#空集合
sNone = set()
print(sNone)  # set()
print(type(sNone))  # <class 'set'>

添加元素

setB.add("4")
print(setB)  # {'2', '1', '4', '3'}
setB.add("李白")
print(setB)  # {'2', '李白', '3', '1', '4'}

合并集合

setC = {1, 2, 3}
setD = {"a", "b", "c"}
#C集合合并D集合,D集合不会变化
setC.update(setD)
print(setC) # {'b', 1, 2, 3, 'a', 'c'}
print(setD) # {'b', 'a', 'c'}

集合元素删除

remove
pop
discard
# 元素删除
setE = {"李白", "杜甫", "白居易", "王羲之"}
print(setE)  # {'李白', '白居易', '杜甫'}
# 删除的元素不存在会报错
setE.remove("李白")
print(setE)  # {'白居易', '杜甫'}
# 随机删除
# setE.pop()
# 删除的元素不存在,不会报错
setE.discard("李白2")
print(setE)

集合的交易和并集

s1 = {1, 2, 3}
s2 = {3, 4, 5}
print("集合的交集", s1 & s2)  # {3}
print("集合的并集", s1 | s2)  # {1, 2, 3, 4, 5}

字典(dict)

字典(Dictionary)是一种映射类型的数据结构,其中每个元素由一个键(key)和一个值(value)组成。

字典中的键必须是唯一的且不可变的,值可以是任意类型的对象。

表示一组键值对的数据,用大括号括起来,如 {‘name’: ‘John’, ‘age’: 30} 等。

字典定义

dictA = {
    "name": "李白",
    "age": 18,
    "name": "杜甫",
}
print(type(dictA))  # <class 'dict'>
# 重复元素,后者会覆盖前者
print(dictA)  # {'name': '杜甫', 'age': 18}

# 直接写大括号,表达的是字典,不是集合
dictB = {}
print(type(dictB))  # <class 'dict'>

# dict函数创建字典
dictC = dict([('name1', '杜甫'), ('name2', '李白')])
print(dictC)  # {'name1': '杜甫', 'name2': '李白'}

添加或修改

# dict函数创建字典
dictC = dict([('name1', '杜甫'), ('name2', '李白')])
print(dictC)  # {'name1': '杜甫', 'name2': '李白'}

# 添加或修改元素
dictC['name4'] = '王羲之'
dictC['name2'] = '王维'
print(dictC)  # {'name1': '杜甫', 'name2': '王维', 'name4': '王羲之'}

删除元素

# 删除元素
del dictC['name1']
print(dictC)  # {'name2': '王维', 'name4': '王羲之'}

获取元素

# get获取不存在的key不会报错,会返回None
print("获取字典中的值", dictC.get("name1"))
# 若Key不存在,会报错
print("获取字典中的值", dictC['name1'])

获取字典的key

keys = dictC.keys()
print(keys)  # dict_keys(['name2', 'name4'])

字典遍历

print(dictC.items())  # dict_items([('name2', '王维'), ('name4', '王羲之')])
print(dictC.values())  # dict_values(['王维', '王羲之'])

clear函数

清空字典

dictD.clear()
print(dictD)  # {}

copy函数

拷贝副本

dictD = dictC.copy()
print("dictD", dictD)  # {'name2': '王维', 'name4': '王羲之'}

fromkeys函数

fromkeys() 是字典类方法之一,用于创建一个新字典,其中包含指定的键和相应的默认值

dictE = {}
dictE = dictE.fromkeys(("name1", "name2"))
print("dictE", dictE)  # {'name1': None, 'name2': None}
dictE = dictE.fromkeys(("name1", "name2"), ("李白", "杜甫"))
# 会把元组的值都赋值给key,不是一一对应赋值
print("dictE", dictE)  # {'name1': ('李白', '杜甫'), 'name2': ('李白', '杜甫')}

pop函数

删除指定的Key,并会返回指定的值

dictE.pop("name1")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LrG61von-1687659109636)(Python.assets/image-20230326223846937.png)]

popitem函数

删除最后一个元素

dictF = {
    'name1': "李白", "name2": "杜甫"
}
print("dictF", dictF)
popitem = dictF.popitem()
print("popitem:", popitem) # ('name2', '杜甫')
print(dictF)  # {'name1': '李白'}

setdefault函数

setdefault()是字典类方法之一,用于获取字典中指定键的值,如果键不存在,则设置指定的默认值,并返回该默认值。

fruits = {'apple': 1, 'banana': 2, 'orange': 3}

# 获取字典中已有键的值
apple_value = fruits.setdefault('apple')
print(apple_value)  # 输出:1

# 获取字典中不存在的键的值,并设置默认值
mango_value = fruits.setdefault('mango', 4)
print(mango_value)  # 输出:4
print(fruits)  # 输出:{'apple': 1, 'banana': 2, 'orange': 3, 'mango': 4}

# 获取字典中不存在的键的值,不设置默认值
pear_value = fruits.setdefault('pear')
print(pear_value)  # 输出:None
print(fruits)  # 输出:{'apple': 1, 'banana': 2, 'orange': 3, 'mango': 4, 'pear': None}

update函数

update()是字典类方法之一,用于将一个字典的键值对添加到另一个字典中,或用一个字典的键值对更新另一个字典中相同键的值。

fruits1 = {'apple': 1, 'banana': 2}
fruits2 = {'orange': 3, 'mango': 4}

# 将 fruits2 的键值对添加到 fruits1 中
fruits1.update(fruits2)
print(fruits1)  # 输出:{'apple': 1, 'banana': 2, 'orange': 3, 'mango': 4}

# 将 fruits1 中已有键的值更新为 fruits2 中的值
fruits2 = {'orange': 5, 'mango': 6}
fruits1.update(fruits2)
print(fruits1)  # 输出:{'apple': 1, 'banana': 2, 'orange': 5, 'mango': 6}

数据运算

1. 算术运算符:

  • + 加号:加法运算
  • - 减号:减法运算
  • * 乘号:乘法运算
  • / 除号:除法运算
  • % 取模运算符:返回除法的余数
  • ** 幂运算符:计算幂次方
  • // 整除运算符:返回除法的商的整数部分
print("加法:", 1 + 1)
print("减法:", 1 - 1)
print("乘法:", 2 * 2)
print("除法:", 4 / 2)
print("取余:", 3 % 2)
print("计算幂次方:", 3 ** 2)
print("整除,返回除法的商的整数部分:", 3 // 2)
print("整除,返回除法的商的整数部分:", 21 // 26)

在这里插入图片描述

2. 比较运算符:

  • == 等于
  • != 不等于
  • < 小于
  • > 大于
  • <= 小于等于
  • >= 大于等于

3. 逻辑运算符:

  • and 逻辑与
  • or 逻辑或
  • not 逻辑非

4. 位运算符:

  • & 按位与
  • | 按位或
  • ^ 按位异或
  • ~ 按位取反
  • << 左移位
  • >> 右移位

5. 赋值运算符:

  • = 简单赋值运算符
  • += 加法赋值运算符
  • -= 减法赋值运算符
  • *= 乘法赋值运算符
  • /= 除法赋值运算符
  • %= 取模赋值运算符
  • **= 幂赋值运算符
  • //= 整除赋值运算符

6. 成员运算符:

  • in 如果在指定的序列中找到值返回 True,否则返回 False。
  • not in 如果在指定的序列中没有找到值返回 True,否则返回 False。
print("1" in "1234")
print(1 in [1, 2, 3, 4])
print(1 in (1, 2, 3))
print(1 in {1, 2, 3})
print(5 not in {1, 2, 3})
print("name" in {"name": "李白"})

在这里插入图片描述

7. 身份运算符:

  • is 判断两个标识符是不是引用同一个对象
  • is not 判断两个标识符是不是引用不同的对象
# 字符串对象相等判断,和java大概一致
a = "李白"
b = "杜甫"
c = a
d = "李白"
print(a is b)  # False
print(a is c)  # True
print(a == c)  # True
print(a is not c)  # False
print(a is d)  # True

以上是Python中的常用运算符,可以用于计算、比较、逻辑操作、位操作、赋值等。

输入输出函数

print("hello")
input("请输入:")

在这里插入图片描述

INPUT = input("请输入:")
print("hello world:", INPUT)

在这里插入图片描述

数据类型转换

查看变量的类型-type函数

# 整型
x = 5
# 浮点型
y = 99.99
# 字符串
name = "李白"
# 布尔型
is_active = True
# 列表
my_list = [1, 2, 3]
# 元组
my_tuple = {1, 2, 3}
# 集合
my_set = {1, 1, 1, 2}
# 字典
my_dict = {"name": '李白', "age": 18}

print("整型", type(x))
print("浮点型", type(y))
print("字符串", type(name))
print("布尔型", type(is_active))
print("列表", type(my_list))
print("元组", type(my_tuple))
print("集合", type(my_set))
print("字典", type(my_dict))

在这里插入图片描述

数据类型转换的方法

int()

将一个数值或字符串转换为整数。如果给定的参数无法转换为整数,则会抛出 ValueError 异常。

num_str = "123"
num_int = int(num_str)
print(num_int)  # 输出:123

float()

将一个数值或字符串转换为浮点数。如果给定的参数无法转换为浮点数,则会抛出 ValueError 异常

num_str = "3.14"
num_float = float(num_str)
print(num_float)  # 输出:3.14

str()

将一个对象转换为字符串。如果给定的参数无法转换为字符串,则会抛出 TypeError 异常。

num = 123
num_str = str(num)
print(num_str)  # 输出:"123"

bool()

将一个对象转换为布尔值。

可以将数字、字符串、列表、元组、集合、字典等对象转换为布尔值。

如果对象为 0、空字符串、空列表、空元组、空集合、空字典等,则布尔值为 False;否则为 True。

num = 123
num_bool = bool(num)
print(num_bool)  # 输出:True

empty_list = []
empty_bool = bool(empty_list)
print(empty_bool)  # 输出:False

list()

将一个可迭代对象转换为列表。

可迭代对象包括列表、元组、集合、字符串、字典等。

num_tuple = (1, 2, 3)
num_list = list(num_tuple)
print(num_list)  # 输出:[1, 2, 3]

str_dict = {'a': 'apple', 'b': 'banana'}
str_list = list(str_dict)
print(str_list)  # 输出:['a', 'b']

tuple()

将一个可迭代对象转换为元组。

可迭代对象包括列表、元组、集合、字符串、字典等。

str_set = {'apple', 'banana', 'orange'}
str_tuple = tuple(str_set)
print(str_tuple)  # 输出:('orange', 'banana', 'apple')

set()

将一个可迭代对象转换为集合。

可迭代对象包括列表、元组、集合、字符串、字典等

num_list = [1, 2, 3]
num_set = set(num_list)
print(num_set)  # 输出:{1, 2, 3}

str_tuple = ('apple', 'banana', 'orange')
str_set = set(str_tuple)
print(str_set)  # 输出:{'orange', 'banana', 'apple'}

dict()

将一个包含键值对的可迭代对象转换为字典。

可迭代对象包括列表、元组、集合、字典等。

如果可迭代对象中的元素不是一个包含两个元素的子序列,则会抛出 ValueError 异常。

num_list = [(1, 'one'), (2, 'two'), (3, 'three')]
num_dict = dict(num_list)
print(num_dict)  # 输出:{1: 'one', 2: 'two', 3: 'three'}

str_tuple = [('a', 'apple'), ('b', 'banana'), ('o', 'orange')]
str_dict = dict(str_tuple)
print(str_dict)  # 输出:{'a': 'apple', 'b': 'banana', 'o': 'orange'}

eval()

将一个字符串解析为 Python 表达式,并返回解析后的结果。

如果字符串不能被解析为 Python 表达式,则会抛出 SyntaxError 异常

num_str = "123"
num_int = eval(num_str)
print(num_int)  # 输出:123

expr_str = "1 + 2 * 3"
expr_result = eval(expr_str)
print(expr_result)  # 输出:7

isinstance函数

isinstance() 是 Python 内置的函数之一,用于判断一个对象是否属于某个指定的类或类型。其语法格式为

isinstance(object, classinfo)

#其中,object 表示要判断的对象,classinfo 表示要判断的类或类型。
#如果 object 是 classinfo 的实例,则返回 True,否则返回 False。
# 判断一个对象是否是整数类型
num = 123
if isinstance(num, int):
    print("num is an integer")
else:
    print("num is not an integer")

# 判断一个对象是否是字符串类型
strA = "hello"
if isinstance(strA, str):
    print("str is a string")
else:
    print("str is not a string")

# 判断一个对象是否是列表类型
lst = [1, 2, 3]
if isinstance(lst, list):
    print("lst is a list")
else:
    print("lst is not a list")
    
print(isinstance("李白", (int, str, float))) # True

流程控制语句

在 Python 中,流程控制语句主要包括三种:条件语句、循环语句和跳转语句。

条件语句if

print("---------------------单if语句---------------------")
if 1 > 0:
    print("1>0")

print("---------------------if else语句---------------------")
b1 = 1 < 0
if b1:
    print("1>0")
else:
    print("1小于0")

print("---------------------if elif语句---------------------")

score = int(input("请输入你的成绩:"))
if score > 90:
    print("你是一个优秀的学生")
elif score > 60:
    print("你的成绩合格")
else:
    print("你不及格")

循环语句

循环语句是通过多次执行相同或类似的代码来实现重复操作的结构。Python 中的循环语句主要有 for 和 while 两种。

  • for 循环:用于遍历序列、列表、字典等可迭代对象中的元素。
  • while 循环:用于重复执行一段代码,直到条件不成立。

在python中for while循环可以和else一起使用

for循环

listA = ["李白", "杜甫", "白居易"]
for item in listA:
    print("for循环遍历:", item)

for index, item in enumerate(listA):
    print("for循环遍历 listA[{}]".format(index), item)
else:
    print("for循环遍历 listA结束")    

while循环

n = 0
while n < 10:
    n = n + 1
    print("while循环:", n)
    
y = 0
while y < 10:
    y = y + 1
    print("while循环:", y)
else:
    print("while循环结束")    

跳转语句

跳转语句是用于改变程序执行顺序的语句,主要包括 break、continue 和 return 三种。

  • break:用于跳出当前循环,不再执行循环中剩余的语句。
  • continue:用于跳过当前循环中的某些语句,继续执行下一次循环。
  • return:用于退出函数,并返回一个值。
listA = ["李白", "杜甫", "白居易"]
for item in listA:
    if item == '李白':
        print("for循环遍历:", item)
        break

for index, item in enumerate(listA):
    if item == '李白':
        print("for循环遍历 listA[{}]".format(index), item)
        continue
else:
    print("for循环遍历 listA结束")

空语句pass

表示此行为空,不运行任何操作。

加了可以提高代码阅读性吧,python语言的代码可读性真的不习惯,容易看串行。。。

if 1 > 0:
    pass

Python的函数

定义函数

定义函数的方式为使用关键字“def”加上函数名和参数列表,函数体代码必须缩进。

要调用函数,只需使用函数名和参数列表即可。

⚠️ 非编译型语言,要注意代码顺序,和java这种编译型语言不同。

def say():
    print("say hello")

say()
def say(param):
    print("函数的定义与调用", param)


say("hello world")

函数名的命名规范

在Python中,函数名的命名规范与变量名的命名规范相同,需要遵循以下规则:

  1. 函数名只能包含字母、数字和下划线,不能包含空格或其他特殊字符;
  2. 函数名不能以数字开头,只能以字母或下划线开头;
  3. 函数名应该简洁明了,能够准确描述函数的功能;
  4. 函数名一般使用小写字母,可以使用下划线分隔多个单词,如“calculate_salary”。

除了以上规则,还有一些约定俗成的规范,如:

  1. 以单个下划线开头的函数名被视为私有函数,不应该被直接调用;
  2. 函数名应该是动词或动词短语,例如“calculate_salary”、“print_report”等;
  3. 如果函数名包含多个单词,使用下划线分隔,而不是驼峰式命名,例如“calculate_salary”而不是“calculateSalary”。

遵循这些命名规范可以使代码更易于理解、维护和共享。

函数参数

函数可以有多个参数,包括必需参数、默认参数和可变参数。

必须参数

必需参数是必须传递给函数的参数,如果不传递,则会引发错误。

def say(param):
    print("函数的定义与调用", param)


say("hello world")

在这里插入图片描述

默认参数

默认参数是在定义函数时就已经指定的参数,如果在调用函数时没有传递该参数,则函数将使用默认值。

def say_hello(param="hello"):
    print("默认参数:", param)


say_hello()

参数为列表的情况

def update_list(param, listA=[]):
    listA.append(param)
    print(listA)


update_list(100)  # [100]
update_list(200)  # [100, 200]

# 上面输出的内容,不是我们想要的结果
def update_list(param, listA=None):
    if listA is None:
        listA = []
    listA.append(param)
    print(listA)


update_list(100)  # [100]
update_list(200)  # [200]

函数调用时的关键字参数

关键字参数,函数调用时,指定参数名称(⚠️ 别和函数定义中的默认参数混淆)

函数的普通参数即必须参数,必须在默认参数的前面。否则会报错

def sum_num(x, a=100, b=200):
    print("a=", a, "b=", b)
    print("计算", a + b)


sum_num(100, b=11, a=22)

例:

在这里插入图片描述

限定关键字传参

* 代表占位,* 之后的参数,在函数调用时,必须使用关键字传参,否则执行报错

def sum_num3(a, *, b, c):
    print(a)
    print(b)
    print(c)


sum_num3(100, b=200, c=300) # b c必须使用关键字传参

可变参数

在Python中,函数的可变参数指的是函数定义时不确定需要传入多少个参数,

这些参数被封装为一个元组或列表作为函数的一个参数。

Python中的可变参数有两种方式:*args**kwargs

*args

在函数定义时,使用*args表示可变参数,这个参数接收一个元组,其中包含所有传入的参数。

def sum_score(*score):
    print("参数为:", score)
    total = 0
    for item in score:
        total = total + item
    print("总分:", total)


sum_score(100, 90, 60, 59)  # 总分: 309
sum_score()

在这里插入图片描述

**kwargs

在函数定义时,使用**kwargs表示可变关键字参数,这个参数接收一个字典,其中包含所有传入的关键字参数。

def print_info(**kwargs):
    print("参数为:", kwargs)
    for key, value in kwargs.items():
        print(f"{key}: {value}")


print_info(name="Tom", age=18, gender="male")
print_info()

在这里插入图片描述

参数解包

Python中,我们可以使用*和**操作符来对参数进行解包。

这样可以将列表、元组、字典等数据结构中的元素分别传入函数中作为单独的参数,

或者将多个参数打包成一个列表、元组或字典。

⚠️ 解包后的参数数量要和函数定义的参数数量一致,否则运行报错

*操作符的参数解包

当我们使用*操作符对一个列表、元组或集合进行解包时,它会将其中的每个元素作为单独的参数传递给函数。

def print_info(name, age, city):
    print(f"Name: {name}")
    print(f"Age: {age}")
    print(f"City: {city}")


info_list = ["Tom", 18, "Beijing"]
print_info(*info_list)

print_info(*"123")
**操作符的参数解包

当我们使用**操作符对一个字典进行解包时,它会将其中的每个键值对作为关键字参数传递给函数。

def print_info2(name, age, city):
    print(f"Name: {name}")
    print(f"Age: {age}")
    print(f"City: {city}")


info_dict = {"name": "Tom", "age": 18, "city": "Beijing"}
print_info2(**info_dict)

参数解包与可变参数

def abc(*args):
    print("参数:", args)
    pass


abc(*["a", "李白"])  # ('a', '李白')

参数定义的顺序

def sort_param(a, b=100, *args, **kwargs):
    print("a=", a)
    print("b=", b)
    print("args=", args)
    print("kwargs=", kwargs)
    pass


sort_param(11, 1, 2, 3, name="李白", age=18)

函数返回值

函数可以返回一个值,使用关键字“return”即可。

def sum_score(*args):
    total = 0
    for item in args:
        total = total + item
    return total


SCORE = sum_score(100, 90, 60)
print("计算总分:", SCORE)


def abc(*args):
    total = 0
    for item in args:
        total = total + item
    print("计算总分:", total)


print("函数的返回值:", abc(100, 90, 60))

函数返回函数

def abc():
    def xyz():
        return [1, 2, 3]

    return xyz


fun = abc()
print("fun:", fun)

print("函数中的函数:", fun()) # [1, 2, 3]

在这里插入图片描述

lambda函数

lambda函数是一种匿名函数,可以用于快速定义简单的函数。

全局变量与局部变量

在函数中定义的变量都是局部变量,它们只在函数内部有效。

如果需要在函数外部使用变量,则需要在函数外部定义该变量,并使用关键字“global”指定该变量为全局变量。

# abc均为局部变量
def fun(a, b):
    c = a + b
    print(c)
    pass


fun(1, 2)

name = '李白'
print(name)


def fun2():
    print(name)
    pass


fun2()


def fun3():
    global age
    age = 18
    print(age)


fun3()
print(age)

递归函数

# 计算阶乘
def fac(n):
    if n == 1:
        return 1
    else:
        return n * fac(n - 1)
    pass


print(fac(3))
# 斐波那契数列
# 1 1 2 3 5 8 11 19 
def fib(n):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)


print(fib(6))

异常处理

基本使用

和java try catch类似

try except…except…except…

try:
    a = 1 / 0
    print(a)
except ZeroDivisionError:
    print("计算公式错误")
except BaseException:
    print("异常处理")

try except…else

try:
    a = 1 / 1
    print(a)
except BaseException as e:
    print("异常处理", e)
else:
    print("计算结果为", a)

try except else finally

try:
    a = 1 / 1
    print(a)
except BaseException as e:
    print("异常处理", e)
else:
    print("计算结果为", a)
finally:
    print("总会执行的代码")

常见的异常类型

在这里插入图片描述

traceback

import traceback

try:
    a = 1 / 0
    print(a)
except:
    traceback.print_exc()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFmpeg 解码 AAC 格式的音频

FFmpeg 默认是可以解码 AAC 格式的音频&#xff0c;但是如果需要获取 PCM16 此类数据则需要经过音频转码。首先要打开解码器&#xff0c;然后向解码器发送 AAC 音频帧&#xff08;不带 ADTS&#xff09;&#xff0c;然后从解码器获取解码后的音频帧&#xff0c;数据是 float 类…

【软考网络管理员】2023年软考网管初级常见知识考点(12)-应用层协议

涉及知识点 应用层协议详解&#xff0c;DNS的概念&#xff0c;FTP的概念&#xff0c;DHCP的概念&#xff0c;Telnet的概念&#xff0c;电子邮件协议 软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主…

我的内网渗透-代理转发(2)

目录 ssh telnet与SSH的区别 安装环境 常用参数 本地端口转发 远程端口转发 动态端口转发 Socks 使用方法 msf端口转发 常用参数 使用方法 创建监听 MSF读取文件命令&#xff08;开启msf的时候直接读取文件就自动设置好监听的各种配置&#xff09; 获取会话后 …

NCI Core Control Messages

NCI 版本参数应编码为 8 位字段&#xff0c;由两个 4 位无符号值组成&#xff0c;表示本规范的主要和次要版本级别。 最高有效 4 位应表示主要版本级别。 最低有效 4 位应表示本规范的次要版本级别。 如果 DH 支持 NFCC 报告的主要版本&#xff0c;则 DH 应继续通信&#xff0…

同比增长超300%,「手势识别」前装赛道借势多模态座舱交互

在座舱多模态交互系统中&#xff0c;手势识别功能正在成为主流的配置之一。高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车前装标配手势识别功能交付37.39万辆&#xff1b;今年1-4月交付23.90万辆&#xff0c;同比增长超过…

Linux下的free、uname、uptime、netstat、dmesg指令

文章目录 1 查看内存的使用情况&#xff1a;free2 查看系统与内核相关信息&#xff1a;uname3 查看系统运行时间和负载&#xff08;uptime&#xff09;4 查看端口监听&#xff1a;netstat5 分析内核产生的信息&#xff1a;dmesg 1 查看内存的使用情况&#xff1a;free free -m…

C++进阶—二叉搜索树

目录 0. 前言 1. 二叉搜索树概念 2. 二叉搜索树操作 3. 二叉搜索树的实现 3.1 非递归实现插入操作Insert 3.2 二叉搜索树中序遍历递归实现&#xff08;排序&#xff09; 3.3 非递归实现查找操作Find 3.4 非递归实现删除操作Erase 3.5 递归实现插入操作InsertR 3.5 递…

c++读取文件之---yaml-cpp使用

实际项目总会遇到有很多超参数的情况&#xff0c;用常规的结构体等无法有效的涵盖所有&#xff0c;为了方便用户进行配置使用&#xff0c;因此使用yaml的方式进行编辑配置&#xff0c;因此去调研使用了yaml-cpp的使用方法。 1、yaml-cpp下载和编译 下载方式很简单&#xff0c…

openfeign实现远程调用

一 openfeign简介 Feign 是声明性(注解)web 服务客户端它使编写 web 服务客户端更加容易请创建一个接口并对其进行注解.它具有可插入注解支持&#xff0c;包括Feign注解和JAXRS注解Feign 还支持可插拔编码器和解码器。Spring cloud 添加了对Spring MVC注解的支持&#xff0c;并…

chatgpt赋能python:Python编译成SO文件和反编译的介绍

Python编译成SO文件和反编译的介绍 什么是SO文件&#xff1f; SO文件&#xff0c;也称为共享对象文件&#xff0c;是一种二进制文件格式&#xff0c;用于在多个应用程序之间共享代码和数据。在Unix和类Unix系统中&#xff0c;它们通常是共享库文件的形式。因此&#xff0c;SO…

chatgpt赋能python:Python编译成可执行文件:让你的代码更加优雅高效

Python编译成可执行文件&#xff1a;让你的代码更加优雅高效 Python作为世界上最受欢迎的编程语言之一&#xff0c;拥有着丰富的库、面向对象的语法和简单易懂的语法结构。然而&#xff0c;在开发Python应用程序时&#xff0c;受限于Python的解释性&#xff0c;导致程序的效率…

Qt实现自定义控件能够以插件的方式加载到Qt设计师

目录 1、自定义部件/控件2、改进法3、插件法3.1、创建工程3.2、工程目录3.3、修改插件类的代码3.3.1、HexSpinBox类的头文件3.3.2、HexSpinBox类的源文件3.3.3、HexSpinBox类的UI文件3.3.4 需要的注意的事项 3.4、生成动态库 4、测试插件能否正常使用4.1、测试Qt设计师能否识别…

认识@Validated 和 @Valid

对于web应用来说&#xff0c;对方法参数的校验是十分重要的&#xff0c;参数校验的是否全面&#xff0c;直接决定整个方法的健壮性。 除了使用麻烦的if判断校验参数&#xff0c;还可以使用Validated 和 Valid注解来进行优雅地参数校验&#xff0c;让参数校验和写诗一样优雅。 …

手机移动 APP测试流程及测试点

1 APP测试基本流程 1.1 流程图 1.2 测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c; 一般测试时间为两三 周(即 15 个工作日)&#xff0c;根据项目情况以及版本质量可适当缩短或延长 测试时间。正式测试前先向主管确认项目排期。 1.3 测试资源 测试任务开始…

移动云智能算力调度平台,谱写算力互联互通新篇章

中国移动算力网络建设取得新进展&#xff01;移动云智能算力调度平台验证了多云服务商间异构算力的统一调度能力&#xff0c;联动国家级超算中心、智算中心&#xff0c;促进东部业务灵活使用西部算力&#xff0c;作为未来算力互联网的统一调度平台将持续开展技术攻关与应用创新…

linux系统LNMP架构部署

文章目录 一、Nginx编译安装1、关闭防火墙&#xff0c;安全机制2、安装依赖包3、创建运行用户与组4、解压包、编译安装路径5、编译安装6、优化路径7、添加 Nginx 系统服务、赋权 二、安装 MySQL 服务1、安装环境依赖包2、创建运行用户与组3、解压包、编译安装路径4.编译安装5、…

chatgpt赋能python:用Python编程计算BMI,轻松掌握健康

用Python编程计算BMI&#xff0c;轻松掌握健康 作为一个现代人&#xff0c;保持健康的体态是我们每个人都需要关注的问题。那么&#xff0c;如何快速地计算自己的BMI呢&#xff1f;Python编程可以帮助我们轻松地实现这个目标。 什么是BMI&#xff1f; BMI全称为Body Mass In…

【Linux操作系统】互斥的4个概念以及认识信号量

文章目录 进程互斥的4个概念认识信号量认识接口理解IPC 信号量主要用于同步和互斥的&#xff0c;下面先来看看什么是同步和互斥。 进程互斥的4个概念 我们把大家都能看到的资源&#xff0c;称为公共资源。并且要想实现进程间通信&#xff0c;首要条件就是要让互相通信的进程看…

一文了解kubernetes部署:API部署过程

API部署 准备工作 一、镜像制作 请参考&#xff1a;《API镜像制作》 二、为k8s配置docker私服密钥 请参考&#xff1a;《配置docker私服密钥》 部署API 修改yaml文件 vi/opt/kubernetes/api/config-server.yaml vi/opt/kubernetes/api/api.yaml 1、修改api相应image值为您的镜…

【深度学习】日常笔记7

可以通过在⽹络中加⼊⼀个或多个隐藏层来克服线性模型的限制&#xff0c;使其能处理更普遍的函数关系类型。要做到这⼀点&#xff0c;最简单的⽅法是将许多全连接层堆叠在⼀起。每⼀层都输出到上⾯的层&#xff0c;直到⽣成最后的输出。 上面红框的公式其实换个角度是没错的。实…