一、函数可变参数
可变参数是Python函数中一种灵活的参数传递方式,允许函数接受任意数量的参数。
它的两种形式为:
*args:用于接受任意数量的位置参数,并将其打包成一个元组
**kwargs:用于接受任意数量的关键字参数,并将其打包成一个字典
#可变参数
def sum_all1(*li) :
return sum(*li)
list1 = [1,2,3]
print(sum_all1(list1)) #6
def sum_all2(*li) :
return sum(li)
print(sum_all2(1,2,3)) #6
#关键字参数
def print_info(**kwargs) :
for key , value in kwargs.items() :
print(f"{key} : {value}",end = ' ')
print_info(name = 'shald',age = 20) #name : shald age : 20
二、快读模版
让你的input速度快3-5倍
#快读模版,可以提高读入数据效率
import sys
input_ = lambda:sys.stdin.readline().strip()
a,b = map(int,input_().split())
print(a,b)
三、嵌套循环
多个for循环进行嵌套的简写
rows = 3
cols = 4
grid = [ (i,j) for i in range(rows) for j in range(cols) ]
print(grid)
#[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
四、埃氏筛(时间复杂度:n loglog n)
一个数是素数,那么他的倍数一定不是素数
import math
def the_primes(n) :
primes = [ ]
is_prime = [True] *(n+1)
is_prime[0] = is_prime[1] = False
for i in range(2,int(math.sqrt(n))+1) :
if is_prime[i] :
for j in range(i*i , n+1 , i) :
is_prime[j] = False
for i in range(2,n+1) :
if is_prime[i] :
primes.append(i)
return primes
print(the_primes(66))
#[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]
五、逆波兰表达式(Reverse Polish Notation,RPN)
借助栈解决后缀表达式的求值问题
def eval_rpn(tokens:list[str])->int :
stack = [ ]
ops = {
'+' : lambda x , y : x + y ,
'-' : lambda x , y : x - y ,
'*' : lambda x , y : x * y ,
'/' : lambda x , y : int( x / y ) #关键!向零取整而非Python默认的向下取整
}
for t in tokens :
if t in ops :
b = stack.pop( )
a = stack.pop( )
stack.append( ops[ t ]( a , b ) )
else :
stack.append( int(t) )
return stack[ 0 ]
str1 = ["4", "13", "5", "/", "+"]
print(eval_rpn(str1))