Python-函数与数据容器超详解

news2024/10/5 19:54:29

1.函数的定义

函数是:组织好的、可重复使用的、用来实现特定功能的代码段。它的优点:将功能封装在函数内,可供随时随地重复利用,提高代码的复用性,减少重复代码,提高开发效率

Python函数的定义方式:先定义函数,后调用函数

#函数的定义
def 函数名(传入参数): 
    函数体
    return 返回值
#函数的调用
函数名(参数)

函数的传参

Python函数传参很简单,函数定义时形式参数用来接收实际参数所传过来的数据,调用时传过来的是实际参数,需要注意:参数之间使用逗号进行分隔,传入的时候,按照顺序传入数据,使用逗号分隔,要和形式参数一一对应。总体思想与C语言大同小异。

#函数定义
def add(x, y):
    sum = x + y
    return sum

#函数调用
print(f"2+3的和为{add(2, 3)}")

函数的返回值

所谓“返回值:就是程序中函数完成事情后,最后给调用者的结果。函数体在遇到return后就结束了,所以写在return后的代码不会执行。上例中return sum就是函数的返回语句,最终把sum的值返回到函数调用的语句中。

None类型

None是一个字面量,类似于C语言当中0、NULL,表示空的、无实际意义的意思,函数返回的None,就表示,这个函数没有返回什么有意义的内容。也就是返回了空的意思。如果没有使用return语句返回数据,那么函数就会返回None。它可以用在if判断上,等同于False,一般用于在函数中主动返回None,配合if判断做相关处理。定义变量的时候,如果暂时不需要变量有具体值,可以用None来代替。

def message():
    print(".....")
ret = message()
print(ret)#结果是None

函数的说明文档

函数的说明文档其实就是注释,增加阅读者的理解和观感,提升阅读的效率,但有一定的规范,这些规范让我们的代码看起来优雅!

def add(x, y):
    """
    add函数实现了两个数的加法
    :param x: x是加法当中的一个参数
    :param y: y是另一个参数
    :return: 返回的是两个数的和
    """
    return x+y
ret = add(2, 3)
print(ret)

注意:在PyCharm软件编写代码时可以通过鼠标悬停,查看调用函数的说明文档

函数的嵌套调用

函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容

def B():
    print("---2---")
def A():
    print("---1---")
    B()
    print("---3---")
A()

局部遍量和全局变量 

局部变量:这里的局部变量的含义和C语言是一样的。局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量

全局变量:指的是在函数体内、外都能生效的变量

那我们能不能在函数里修改全局变量的值呢?答案是肯定的,这牵扯到一个关键字的使用,global关键字,使用 global关键字可以在函数内部声明变量为全局变量

num = 100
def modify():
    num = 200
    print(num)#200
modify()
print(num)#100

num = 100
def modify():
    global num
    num = 200
    print(num)#200
modify()
print(num)#200

2.数据容器 

Python中的数据容器类似于C语言当中的数组的意思,可以一次性存放多个数据。是一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。它根据是否支持重复元素、是否可以修改、是否有序等划分为5类,分别是:列表、元组、字符串、集合、字典。

list(列表) 

上面讲过数据容器类似于我们C语言当中所学到的数组的概念,列表就是其中的一个代表,现在就让我们来了解列表的定义,它的基本语法是:以[]作为标识,列表内每一个元素之间用,逗号隔开

name = ['张三', '李四', 666] 

但是这个列表又和我们C语言当中的数组有所区别,列表当中的数据可以是不同的数据类型,并且可以嵌套类似于二维数组的含义。

列表的下标索引:从前向后的方向,从0开始,依次递增。从后向前:从-1开始,依次递减

同样的道理要注意下标索引的取值范围,超出范围无法取出元素,并且会报错 

name = ['张三', '李四', 666]  
print(name[0]) #张三        
print(name[1]) #李四        
print(name[-3])#张三        

列表的常用操作(方法):列表除了可以定义、使用下标索引获取值,也可以进行插入元素、删除元素、清空列表、修改元素、统计元素个数等等功能,这些功能称之为:列表的方法。下面就一一展开讲解:

列表的查询功能列表.index(元素),它的返回值是所要查找元素的下标,而且是正向的下标。查找指定元素在列表的下标,如果找不到,报错ValueError

name = ['张三', '李四', 666]
temp = name.index('张三') 
print(temp)#0           

列表的修改功能列表[下标]= 值 ,就是赋值,修改特定位置(索引)的元素值

列表的插入功能: 列表.insert(下标,元素),在指定的下标位置,插入指定的元素

name = ['张三', '李四', 666]            
name.insert(1, '王二')                
print(name)#['张三', '王二', '李四', 666] 

列表的追加功能1: 列表.append(元素),将指定元素,追加到列表的尾部

name = ['张三', '李四', 666]              
name1 = ['王二', '麻子']                  
name.append(name1[0])                 
print(name)#['张三', '李四', 666, '王二']
name.append(666)                        
print(name)#['张三', '李四', 666, '王二', 666]   

列表的追加功能2列表.extend(其它数据容器),将其它数据容器的内容取出,依次追加到列表尾部 

name = ['张三', '李四', 666]                    
name1 = ['王二', '麻子']                        
name.extend(name1)                          
print(name)#['张三', '李四', 666, '王二', '麻子']   

列表的删除功能1: del 列表[下标]

列表的删除功能2:列表.pop(下标)

name = ['张三', '李四', 666]                
name1 = ['王二', '麻子']                    
name.extend(name1)                      
print(name)#['张三', '李四', 666, '王二', '麻子']
del name[0]                             
print(name)#['李四', 666, '王二', '麻子']     
name.pop(0)                             
print(name)#[666, '王二', '麻子']           

删除列表中的第一个匹配项列表.remove(元素),就是遍历整个列表删除其中第一个所要删除的元素

name = ['张三', '李四', 666]                      
name1 = ['王二', '麻子', 666]                     
name.extend(name1)                            
print(name)#['张三', '李四', 666, '王二', '麻子', 666]
name.remove(666)                              
print(name)#['张三', '李四', '王二', '麻子', 666]     

清空列表:列表.clear()

name = ['张三', '李四', 666]                      
name1 = ['王二', '麻子', 666]                     
name.extend(name1)                            
print(name)#['张三', '李四', 666, '王二', '麻子', 666]
name.clear()                                  
print(name)#[]                                

统计某元素在列表内的数量: 列表.count(元素)

name = ['张三', '李四', 666]                      
name1 = ['王二', '麻子', 666]                     
name.extend(name1)                            
print(name)#['张三', '李四', 666, '王二', '麻子', 666]
count = name.count(666)                       
print(count)#2                                

 统计列表内有多少元素:len(列表)

name = ['张三', '李四', 666]                      
name1 = ['王二', '麻子', 666]                     
name.extend(name1)                            
print(name)#['张三', '李四', 666, '王二', '麻子', 666]
count = len(name)                             
print(count)#6                                

汇总表格:

列表元素的遍历:在C语言当中,我们常常会使用for循环去遍历一个数组,那在Python中,我们能不能这样做呢?答案是肯定的,Python中for循环和while循环都可以实现遍历列表,while循环的条件,防止死循环,for循环用起来会更加方便,它的语法就是从数据容器中逐个取出元素赋值到临时变量上。

name = ['张三', '李四', 666, '王二', '麻子', 666]
index = 0                                
#while循环遍历列表                             
# while index < len(name):               
#     print(f"列表的元素:{name[index]}")      
#     index += 1                         
#for循环遍历列表                               
for index in name:                       
    print(f"列表的元素:{index}")              

tuple(元组) 

元组和列表的功能是差不多的,主要的区别就是元组里的内容不可以修改定义的方式是使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。需要格外注意的是:元组只有一个数据,这个数据后面要添加逗号。还有一点是虽然元组不可以修改,但当元组里面的内容包括列表时那么元组里面的列表内容是可以修改的,但是列表不能换成其它数据类型。

由于不能修改,它的相关操作也少了许多

name = ('张三', '李四', 666, '王二', '麻子', 666, [1, 2, 3])
print(len(name))#7                                  
print(name[0])#张三                                   
name[6][0] = 0                                      
print(name[6][0]) #0                                
index = 0                                           
while index < len(name):                            
    print(f"元组的元素:{name[index]}")                   
    index += 1                                      
# 元组的元素:张三                                          
# 元组的元素:李四                                          
# 元组的元素:666                                         
# 元组的元素:王二                                          
# 元组的元素:麻子                                          
# 元组的元素:666                                         
# 元组的元素:[0, 2, 3]                                   

str(字符串)

我们前面已经接触到了字符串,其实字符串也是一个数据容器,它不仅可以通过下标进行访问而且也可以进行相应的操作。同元组一样,字符串是一个无法修改的数据容器,而且它只能存储字符

  • 下标访问时,和列表元组的方式是相同的从前向后,下标从0开始,从后向前,下标从-1开始
  • 查找特定字符串的下标索引值:字符串.index(字符串),返回的是所查字符串的起始下标
  • 字符串的替换:字符串.replace(字符串1,字符串2),将字符串内的全部字符串1替换为字符串2不是修改字符串本身,而是得到了一个新字符串
  • 字符串的分割:字符串.split(分隔符字符串),按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中字符串本身不变,而是得到了一个列表对象。
  • 字符串的规整操作:字符串.strip()不带入参数是去前后空格带入参数是去前后指定字符串
  • 统计字符申中某宇符申的出现次数:和列表元组一样使用count方法
  • 统计字符串的长度:和列表元组一样使用len()方法

汇总表格:

 

name = "zhangsan lisi wanger"                 
print(name[1])#h                              
n = name.index('an')                          
print(n)#2                                    
new_name = name.replace('zhangsan', 'mazi')   
print(new_name)#mazi lisi wanger              
new_list = name.split(' ')                    
print(new_list)#['zhangsan', 'lisi', 'wanger']
name = "\n  zhangsan lisi wanger  \n"         
new_name = name.strip()                       
print(new_name)#zhangsan lisi wanger          
name = "zhangsan lisi wanger"                 
new_name = name.strip('zr')                   
print(new_name)#hangsan lisi wange            
name = "zhangsan lisi wanger"                 
print(name.count('a'))#3                      
print(len(name))#20                           

序列 

序列是指:内容连续、有序,可使用下标索引的一类数据容器。前面所介绍的列表、元组、字符串,都可以视为序列,序列是支持切片操作的,切片就是从一个序列中,取出一个子序列。语法是:序列[起始下标:结束下标:步长],表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列。需要注意此操作不会影响序列本身,而是会得到一个新的序列

  • 起始下标表示从何处开始,可以留空,留空视作从头开始
  • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
  • 步长表示,依次取元素的间隔,可以省略,省略步长默认为1,也可以为负数表示倒序执行
name = "zhangsan lisi wanger"    
name1 = name[9:13]               
print(name1)#lisi                
name2 = name[:]                  
print(name2)#zhangsan lisi wanger
list = [1, 2, 3, 4, 5]           
list1 = list[1:3:2]              
print(list1)#[2]                 

set(集合) 

前面所讲述的列表、元组、字符串它们都支持重复元素且是有序的,局限就在于都支持重复元素,那有没有不支持的呢?即有去重作用这样的数据容器呢?答案是肯定的,这就是集合。集合的定义与它们几乎相同,无非是用{}来表示。因为是无序的,所以不支持下标访问,它具有以下的操作:

  • 添加新元素:集合.add(元素),集合本身被修改,添加了新元素
  • 移除元素:集合.remove(元素),集合本身被修改,移除了元素
  • 从集合中随机取出元素:集合.pop(),会得到一个元素的结果。同时集合本身被修改,元素被移除
  • 清空集合:集合.clear(),集合本身被清空
  • 取出2个集合的差集:集合1.difference(集合2)取出集合1和集合2的差集(集合1有而集合2没有的),得到一个新集合,集合1和集合2不变
  • 消除2个集合的差集:集合1.difference_update(集合2),在集合1内,删除和集合2相同的元素,集合1被修改,集合2不变
  • 2个集合合并:集合1.union(集合2),将集合1和集合2组合成新集合,得到新集合,集合1和集合2不变

汇总如下:

 

#定义集合                                                                
name = {"zhangsan", "lisi", "wanger", "zhangsan", "wanger", "mazi"}  
print(name)#{'wanger', 'mazi', 'lisi', 'zhangsan'}                   
#添加新元素                                                               
name.add(666)                                                        
print(name)#{'lisi', 'wanger', 'mazi', 'zhangsan', 666}              
name.add("zhangsan")                                                 
print(name)#{'lisi', 'wanger', 'mazi', 'zhangsan', 666}              
#移除元素                                                                
name.remove(666)                                                     
print(name)#{'wanger', 'lisi', 'mazi', 'zhangsan'}                   
name.remove("zhangsan")                                              
print(name)#{'wanger', 'lisi', 'mazi'}                               
#从集合中随机取出元素                                                          
temp = name.pop()                                                    
print(temp)#mazi                                                     
#清空集合                                                                
name.clear()                                                         
print(name)#set()                                                    
#取出2个集合的差集                                                           
name1 = {"zhangsan", "lisi", "wanger", "mazi"}                       
name2 = {"zhangsan", "lisi", "wanger", "zhangsan", "wanger"}         
tp = name1.difference(name2)                                         
print(tp)#{'mazi'}                                                   
print(name1)#{'zhangsan', 'lisi', 'mazi', 'wanger'}                  
print(name2)#{'zhangsan', 'lisi', 'wanger'}                          
#消除2个集合的差集                                                           
name1 = {"zhangsan", "lisi", "wanger", "mazi"}                       
name2 = {"zhangsan", "lisi", "wanger", "zhangsan", "wanger"}         
name1.difference_update(name2)                                       
print(name1)#{'mazi'}                                                
print(name2)#{'zhangsan', 'lisi', 'wanger'}                          
#2个集合合并                                                              
name1 = {"zhangsan", "lisi", "wanger", "mazi"}                       
name2 = {"zhangsan", "lisi", "wanger", "zhangsan", "wanger"}         
name3 = name1.union(name2)                                           
print(name3)#{'lisi', 'zhangsan', 'mazi', 'wanger'}                  
print(name1)#{'mazi', 'lisi', 'wanger', 'zhangsan'}                  
print(name2)#{'lisi', 'wanger', 'zhangsan'}                          
#集合的遍历                                                               
set = {1, 2, 3, 4}                                                   
for element in set:                                                  
    print(element)                                                   

dict(字典) 

字典类似于我们日常生活中所使用的汉语字典通过字查找字的含义的功能一样,它可以通过key取出value的操作,字典的定义,同样使用{},不过存储的元素是一个个的:键值对。

  • 字典同集合一样,不可以使用下标索引,但是字典可以通过Key值来取得对应的Value
  • 字典内Key也不允许重复,重复添加等同于覆盖了原有的数据
  • 键值对的Key和Value可以是任意类型(Key)不可为字典,也就是说它可以嵌套,只能在value中进行嵌套

它的一些操作如下:

  • 新增元素: 字典[Key]= Value字典被修改,新增了元素,更新元素也是如此,如果字典里有key就更新,没有就新增
  • 删除元素:字典.pop(Key)获得指定Key的Value,同时字典被修改,指定Key的数据被删除
  • 清空字典:字典.clear()
  • 获取全部的key:字典.keys(),得到字典中的全部Key,可用于遍历字典

汇总如下:

 

#知道key获取value                                              
dict = {"张三": 99, "李四": 77, "王二": 66,}                     
print(dict["张三"])#99                                       
#添加或更新                                                     
dict["张三"] = 66                                            
print(dict)#{'张三': 66, '李四': 77, '王二': 66}                 
dict["麻子"] = 55                                            
print(dict)#{'张三': 66, '李四': 77, '王二': 66, '麻子': 55}       
#删除                                                        
temp = dict.pop("李四")                                      
print(dict)#{'张三': 66, '王二': 66, '麻子': 55}                 
print(temp)#77                                             
#获取全部的key                                                  
tp = dict.keys()                                           
print(tp)#dict_keys(['张三', '王二', '麻子'])                    
#遍历字典                                                      
for name in dict:                                          
    print(f"{name}的分数是:{dict[name]}")                      
# 张三的分数是:66                                                
# 王二的分数是:66                                                
# 麻子的分数是:55                                                

数据容器的通用操作

前面我们介绍了len(容器),包括for循环进行遍历都是数据容器的通用操作,其实还有以下的通用操作:

  • max(容器):统计容器的最大元素
  • min(容器):统计容器的最小元素
  • list(容器):将给定容器转换为列表
  • str(容器):将给定容器转换为字符串
  • tuple(容器):将给定容器转换为元组
  • set(容器):将给定容器转换为集合
  • sorted(容器, [reverse = True]):将给定容器进行排序,注意reverse默认为files,如果需要倒序,需要将reverse = True

汇总如下:

list1 = [1, 2, 3, 4, 5]                                                 
tuple1 = (1, 2, 3, 4, 5)                                                
str1 = "abcdef"                                                         
set1 = {"zhangsan", "lisi", "wanger", "mazi"}                           
dict1 = {'张三': 66, '王二': 66, '麻子': 55}                                  
print(list(list1))#[1, 2, 3, 4, 5]                                      
print(list(tuple1))#[1, 2, 3, 4, 5]                                     
print(list(str1))#['a', 'b', 'c', 'd', 'e', 'f']                        
print(list(set1))#['zhangsan', 'lisi', 'mazi', 'wanger']                
print(list(dict1))#['张三', '王二', '麻子'],把value值舍去                         
list1 = [1, 2, 3, 4, 5]                                                 
tuple1 = (1, 2, 3, 4, 5)                                                
str1 = "abcdef"                                                         
set1 = {"zhangsan", "lisi", "wanger", "mazi"}                           
dict1 = {'张三': 66, '王二': 66, '麻子': 55}                                  
print(tuple(list1))#(1, 2, 3, 4, 5)                                     
print(tuple(tuple1))#(1, 2, 3, 4, 5)                                    
print(tuple(str1))#('a', 'b', 'c', 'd', 'e', 'f')                       
print(tuple(set1))#('mazi', 'zhangsan', 'wanger', 'lisi')               
print(tuple(dict1))#('张三', '王二', '麻子'),把value值舍去                        
list1 = [1, 2, 3, 4, 5]                                                 
tuple1 = (1, 2, 3, 4, 5)                                                
str1 = "abcdef"                                                         
set1 = {"zhangsan", "lisi", "wanger", "mazi"}                           
dict1 = {'张三': 66, '王二': 66, '麻子': 55}                                  
print(str(list1))#[1, 2, 3, 4, 5]                                       
print(str(tuple1))#(1, 2, 3, 4, 5)                                      
print(str(str1))#abcdef                                                 
print(str(set1))#{'zhangsan', 'mazi', 'lisi', 'wanger'}                 
print(str(dict1))#{'张三': 66, '王二': 66, '麻子': 55}                        
list1 = [1, 2, 3, 4, 5]                                                 
tuple1 = (1, 2, 3, 4, 5)                                                
str1 = "abcdef"                                                         
set1 = {"zhangsan", "lisi", "wanger", "mazi"}                           
dict1 = {'张三': 66, '王二': 66, '麻子': 55}                                  
print(set(list1))#{1, 2, 3, 4, 5}                                       
print(set(tuple1))#{1, 2, 3, 4, 5}                                      
print(set(str1))#{'c', 'b', 'a', 'd', 'e', 'f'}                         
print(set(set1))#{'zhangsan', 'lisi', 'mazi', 'wanger'}                 
print(set(dict1))#{'王二', '麻子', '张三'} 把value值舍去 
list1 = [2, 5, 1, 4, 5]                            
print(sorted(list1)) #[1, 2, 4, 5, 5]              
list1 = [2, 5, 1, 4, 5]                            
print(sorted(list1, reverse=True))#[5, 5, 4, 2, 1]                          

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

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

相关文章

Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

日前&#xff0c;Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站&#xff0c;分享Helix Core版本控制系统及其协作套件的强大功能与最新动态&#xff0c;助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场&#xff0c;带来《Perforce Helix C…

论文理解【LLM-CV】—— 【MAE】Masked Autoencoders Are Scalable Vision Learners

文章链接&#xff1a;Masked Autoencoders Are Scalable Vision Learners代码&#xff1a;GitHub - facebookresearch/mae发表&#xff1a;CVPR 2022领域&#xff1a;LLM CV一句话总结&#xff1a;本文提出的 MAE 是一种将 Transformer 模型用作 CV backbone 的方法&#xff0c…

新闻推荐系统:Spring Boot的可扩展性

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

csp-j模拟五补题报告

前言 今天第二题文件名把 r 写成 t 了 又跌出前10名了 白丢了好多分 &#xff08;“关于二进制中一的个数的研究与规律”这篇文章正在写&#xff09; 第一题 牛奶(milk) 我的代码&#xff08;AC&#xff09; #include<bits/stdc.h> #define ll long long #define fi …

Acwing 线性DP

状态转移方程呈现出一种线性的递推形式的DP&#xff0c;我们将其称为线性DP。 Acwing 898.数字三角形 实现思路&#xff1a; 对这个三角形的数字进行编号&#xff0c;状态表示依然可以用二维表示&#xff0c;即f(i,j),i表示横坐标&#xff08;横线&#xff09;&#xff0c;j表…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…

Windows应急响应-Auto病毒

文章目录 应急背景分析样本开启监控感染病毒查看监控分析病毒行为1.autorun.inf分析2.异常连接3.进程排查4.启动项排查 查杀1.先删掉autorun.inf文件2.使用xuetr杀掉进程3.启动项删除重启排查入侵排查正常流程 应急背景 运维人员准备通过windows共享文档方式为公司员工下发软件…

【Java】Java面试题笔试

[赠送]面试视频指导简历面试题 Java面试笔试题题库华为 java笔试面试题2014.files 就业相关java 面试题 面试题库 视频笔记 java笔试题大集合及答案 java面试书籍源码 java算法大全源码包8张图解 java.docx25个经典的Spring面试问答.docx 25个经典的Spring面试问答.docx 100家大…

知识图谱入门——10:使用 spaCy 进行命名实体识别(NER)的进阶应用:基于词袋的实体识别与知识抽取

在构建知识图谱的过程中&#xff0c;如何准确地识别和提取实体是关键。spaCy 提供了强大的命名实体识别&#xff08;NER&#xff09;功能&#xff0c;我们可以结合自定义规则和工具来实现更精准的实体抽取。本文将详细探讨如何在 spaCy 中实现自定义实体抽取&#xff0c;包括使…

OpenAI 推出 Canvas 工具,助力用户与 ChatGPT 协作写作和编程

OpenAI 近日推出了一款名为 Canvas 的新工具&#xff0c;旨在帮助用户更高效地与 ChatGPT 协作进行写作与编程。 Canvas 允许用户在一个独立窗口中与 ChatGPT 实时协作修改内容。无论是改进文本、调整语言风格、审查代码&#xff0c;还是在不同编程语言间转换&#xff0c;Canv…

Js逆向分析+Python爬虫结合

JS逆向分析Python爬虫结合 特别声明&#x1f4e2;&#xff1a;本教程只用于教学&#xff0c;大家在使用爬虫过程中需要遵守相关法律法规&#xff0c;否则后果自负&#xff01;&#xff01;&#xff01; 完整代码地址Github&#xff1a;https://github.com/ziyifast/ziyifast-co…

自闭症干预寄宿学校:为孩子搭建沟通与社交的桥梁

在探索自闭症儿童教育的广阔天地里&#xff0c;一所优秀的寄宿学校不仅是知识的殿堂&#xff0c;更是孩子们学习沟通与社交技能的桥梁。位于广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是这样一所专注于为自闭症儿童提供全面、个性化教育服务的机构&#xff0c;它以其独…

Linux-du命令使用方法

Linux-du&#xff08;disk useage&#xff09;命令 du 命令用于查看文件和目录占用的磁盘空间。 du [选项] [文件或目录]-h (human-readable)&#xff1a; 将输出格式转为人类可读的形式&#xff0c;使用 KB、MB 等单位。 du -h /path/to/directory1.5M /path/to/directory…

Pikachu-SSRF(curl / file_get_content)

SSRF SSRF是Server-side Request Forge的缩写&#xff0c;中文翻译为服务端请求伪造。产生的原因是由于服务端提供了从其他服务器应用获取数据的功能且没有对地址和协议等做过滤和限制。常见的一个场景就是&#xff0c;通过用户输入的URL来获取图片。这个功能如果被恶意使用&am…

Linux 之 安装软件、GCC编译器、Linux 操作系统基础

安装软件、GCC编译器、Linux 操作系统基础 学习任务&#xff1a; 安装 Vmware虚拟机、掌握Ubuntu 系统的使用认识 Ubuntu 操作系统的终端和 Shell掌握软件安装、文件系统、掌握磁盘管理与解压缩掌握 VIM 编辑器、Makefile 基本语法熟悉 Linux 常见指令操作 安装好开发软件&…

力扣189.轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令命令解释SHOW DATABASES&#xff1b;展示所有的数据库CREATE DATABASE 数据库名称; 创…

10以内数的分解

// 10以内数的分解.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> using namespace std; int main(int argc, char* argv[]){for (int i 2; i < 10; i){for (int j 1; j < i; j){printf("%d%d%d ",j…

CSS样式基础样式选择器(案例+代码实现+效果图)

目录 1.css样式的规则 2.引入css样式的方式 1)行内式 2)内嵌式 3)外链式 1-link导入 2-import导入 4)总 3.css基础选择器 1)标签选择器 案例&#xff1a;使用标签选择器编写一个圆 1.代码 2.效果 2)类选择器 案例&#xff1a;使用类选择器为div添加背景色 1.代码 2.效果 3)id…

深度探索Kali Linux的精髓与实践应用

Kali Linux简介 Kali Linux作为全球网络安全领域的首选操作系统之一&#xff0c;其强大的功能性及广泛的适用范围令人瞩目。除了上述基础介绍外&#xff0c;让我们深入探究Kali Linux的几个关键特性及其在实际操作中的具体应用案例。 Kali工具集成&#xff1a;全面的安全工具…