Python知识点汇总

1. 位置参数 *args 关键字参数**kwargs

args、kwargs也可以换成别的表达

示例:

def example_function(arg1, arg2, *args, **kwargs):
    print(f"固定参数: {arg1}, {arg2}")
    print(f"额外位置参数: {args}")
    print(f"额外关键字参数: {kwargs}")

example_function(1, 2, 3, 4, 5, name="Alice", age=25)
# 输出:
# 固定参数: 1, 2
# 额外位置参数: (3, 4, 5)
# 额外关键字参数: {'name': 'Alice', 'age': 25}

2. PEP 8 相关规范

什么是PEP 8规范:PEP8 是 Python 官方制定的代码风格指南,规定了命名规范、缩进、空行、注释等代码编写细节,旨在提高 Python 代码的可读性和一致性

  • 不要使用反斜杠连接行
  • 方法定义之间空1行,顶级定义之间空两行(顶级定义(Top-level definitions) 指的是直接定义在模块(.py 文件)最外层的代码元素,不属于任何类、函数或其他代码块的定义。简单来说,就是没有缩进的定)

3. __new____init__ 的区别

class MyClass:
    # __new__:创建实例(静态方法)
    def __new__(cls, *args, **kwargs):
        print(f"__new__ 被调用,正在创建 {cls.__name__} 实例")
        # 调用父类的__new__创建并返回实例
        instance = super().__new__(cls)
        return instance

    # __init__:初始化实例(实例方法)
    def __init__(self, name):
        print(f"__init__ 被调用,正在初始化实例")
        self.name = name  # 设置实例属性

    def show(self):
        print(f"实例属性 name = {self.name}")


# 创建实例
obj = MyClass("测试对象")
obj.show()

# 输出结果:
# __new__ 被调用,正在创建 MyClass 实例
# __init__ 被调用,正在初始化实例
# 实例属性 name = 测试对象

new 的第一个参数是 cls(当前类),必须返回一个实例。
init 的第一个参数是 self(new 返回的实例),无需返回值。

4. rangexrange的区别

# Python 2 环境下
# 遍历 range()(直接遍历已存在的列表)
for i in range(1, 5):
    print(i)  # 1, 2, 3, 4

# 遍历 xrange()(动态生成每个元素)
for i in xrange(1, 5):
    print(i)  # 1, 2, 3, 4(结果相同,但生成方式不同)
  • Python 2:range() 返回列表(占用内存多),xrange() 返回生成器(节省内存)。
  • Python 3:仅保留range(),功能等同于 Python 2 的 xrange()。

5. 字符串统计单词个数

from collections import Counter

# 定义一个英文句子
sentence = "I like python, python is easy, I like coding, coding is fun"

# 简单处理:去除标点并转为小写(避免大小写和标点影响统计)
processed = sentence.replace(",", "").lower()

# 按空格分割成单词列表
words = processed.split()

# 使用Counter统计每个单词的出现次数
word_counts = Counter(words)

print("单词出现次数:")
for word, count in word_counts.items():
    print(f"{word}: {count}次")

6. 列表扁平化

def flatten(nested):
    result = []
    for item in nested:
        if isinstance(item, list):
            # 如果是列表,递归扁平化后合并
            result.extend(flatten(item))
        else:
            # 否则直接添加
            result.append(item)
    return result

# 测试三层嵌套列表
nested_list = [1, [2, [3, 4], 5], [6, [7, [8]]]]
print(flatten(nested_list))  # 输出:[1, 2, 3, 4, 5, 6, 7, 8]

7. 二分查找

(1)非递归——左右指针

def binary_search(data,target):
	left = 0
	right = len(data)-1
	while left <= right:
		mid = (left+right)//2
		if data[mid] == target:
			return True
		elif data[mid] > target:
			right = mid-1
		else:
			left = mid+1
	return False

(2)递归

def binary_search(data,target):
	 n = len(data)
	 if n>0:
		 mid = n//2
		 if data[mid] == target:
		 	return True
		 elif data[mid]<target:
		 	binary_search(data[mid+1:],target)
		 else:
		 	binary_search(data[:mid],target)
	 return False

8. == 和 is 的区别

9. 字典和json的转换

“dump 出”:把字典 “倒出来” 变成 JSON 字符串。
“load 入”:把 JSON 字符串 “装进去” 变成字典。

import json

# 原字典
my_dict = {"name": "张三", "age": 30}

# dumps:字典 → JSON字符串(dump出字符串)
json_str = json.dumps(my_dict)
print(type(json_str))  # <class 'str'>(是字符串)

# loads:JSON字符串 → 字典(load入字典)
new_dict = json.loads(json_str)
print(type(new_dict))  # <class 'dict'>(是字典)

10.字典推导式

# 键是数字,值是数字的平方
square_dic = {x: x**2 for x in [1, 2, 3, 4]}
# 结果:{1: 1, 2: 4, 3: 9, 4: 16}

# 从列表生成键,值是键的长度
len_dic = {word: len(word) for word in ["apple", "banana", "cat"]}
# 结果:{'apple': 5, 'banana': 6, 'cat': 3}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值