用print(*ls),还可以加入sep=''与end=''
ls=[1,2,3,4,5]
print(ls)
#[1,2,3,4,5]
print(*ls)
#1 2 3 4 5
print(*ls,sep=',',end='.\n')
#1,2,3,4,5.
位与(&
) 规则:两个对应位都为 1
时,结果为 1
,否则为 0
。 示例:9 & 5
(9
的二进制 00001001
,5
的二进制 00000101
),运算结果为 00000001
(十进制 1
)。
按位或(|
) 规则:两个对应位中至少有一个为 1
时,结果为 1
,否则为 0
。 示例:9 | 5
(00001001 | 00000101
),运算结果为 00001101
(十进制 13
)。
按位异或(^
) 规则:两个对应位不同时为 1
,相同时为 0
。 示例:9 ^ 5
(00001001 ^ 00000101
),运算结果为 00001100
(十进制 12
)。
按位取反(~
) 规则:将操作数的每一位二进制取反(1
变 0
,0
变 1
)。 示例:~9
(9
的二进制 00001001
,取反后为 11110110
,在 Python 中按补码规则解释为 -10
)。
左移位(<<
) 规则:将二进制位向左移动指定位数,右侧补 0
。相当于乘以 \(2^n\)(n 为移动位数)。 示例:9 << 2
(00001001
左移 2 位为 0010100
,即 9 * 4 = 36
)。
右移位(>>
) 规则:将二进制位向右移动指定位数,左侧补 0
(正数)或符号位(负数)。相当于整除 \(2^n\)。 示例:9 >> 2
(00001001
右移 2 位为 00000010
,即 9 // 4 = 2
)。
判断子网
ipaddress
库是 Python 标准库的一部分,它提供了用于操作 IPv4 和 IPv6 地址和网络的类。以下是 ipaddress
库中一些常用类和方法的用法及参数介绍:
ipaddress.ip_address()
import ipaddress
# 创建 IPv4 地址对象
ipv4 = ipaddress.ip_address('192.168.1.1')
print(ipv4)
# 创建 IPv6 地址对象
ipv6 = ipaddress.ip_address('2001:0db8:85a3:0000:0000:8a2e:0370:7334')
print(ipv6)
'''
192.168.1.1
2001:db8:85a3::8a2e:370:7334
'''
ipaddress.ip_network()
'192.168.1.0/24'
)。strict
参数(可选):默认为 True
,表示严格检查输入的网络地址是否为网络地址的起始地址;若为 False
,则允许输入非网络地址的起始地址。import ipaddress
# 创建 IPv4 网络对象
ipv4_network = ipaddress.ip_network('192.168.1.0/24')
print(ipv4_network)
# 允许非网络地址的起始地址
ipv4_network_non_strict = ipaddress.ip_network('192.168.1.1/24', strict=False)
print(ipv4_network_non_strict)
'''
192.168.1.0/24
192.168.1.0/24
'''
ipaddress.ip_interface()
'192.168.1.1/24'
)。import ipaddress
# 创建 IPv4 接口对象
ipv4_interface = ipaddress.ip_interface('192.168.1.1/24')
print(ipv4_interface)
'''
192.168.1.1/24
'''
version
:返回 IP 地址的版本(4 或 6)。network
:返回该 IP 地址所属的网络。broadcast_address
:返回网络的广播地址。num_addresses
:返回网络中可用的 IP 地址数量。hosts()
:返回网络中所有可用的主机地址的迭代器。import ipaddress
ipv4_network = ipaddress.ip_network('192.168.1.0/24')
print(f"网络版本: {ipv4_network.version}")
print(f"广播地址: {ipv4_network.broadcast_address}")
print(f"可用 IP 地址数量: {ipv4_network.num_addresses}")
print("可用主机地址:")
for host in ipv4_network.hosts():
print(host)
'''
网络版本: 4
广播地址: 192.168.1.255
可用 IP 地址数量: 256
可用主机地址:
...
...
...
...
...
'''
import ipaddress
# 判断是否为 IPv4 地址
try:
ip = ipaddress.ip_address('192.168.1.1')
if isinstance(ip, ipaddress.IPv4Address):
print("这是一个 IPv4 地址")
elif isinstance(ip, ipaddress.IPv6Address):
print("这是一个 IPv6 地址")
except ValueError:
print("输入的不是有效的 IP 地址")
#输出:这是一个 IPv4 地址
# 判断是否为私有地址
ip = ipaddress.ip_address('192.168.1.1')
if ip.is_private:
print("这是一个私有 IP 地址")
#输出:这是一个私有 IP 地址
# 判断是否为回环地址
ip = ipaddress.ip_address('127.0.0.1')
if ip.is_loopback:
print("这是一个回环 IP 地址")
#输出:这是一个回环 IP 地址
import ipaddress
ips = [
ipaddress.ip_address('192.168.1.3'),
ipaddress.ip_address('192.168.1.1'),
ipaddress.ip_address('192.168.1.2')
]
sorted_ips = sorted(ips)
for ip in sorted_ips:
print(ip)
'''
192.168.1.1
192.168.1.2
192.168.1.3
'''
import ipaddress
ip = ipaddress.ip_address('192.168.1.1')
ip_int = int(ip)
print(f"IP 地址 {ip} 转换为整数: {ip_int}")
new_ip = ipaddress.ip_address(ip_int)
print(f"整数 {ip_int} 转换为 IP 地址: {new_ip}")
'''
IP 地址 192.168.1.1 转换为整数: 3232235777
整数 3232235777 转换为 IP 地址: 192.168.1.1
'''
import ipaddress
# 合并网络示例
networks = [
ipaddress.ip_network('192.168.1.0/25'),
ipaddress.ip_network('192.168.1.128/25')
]
'''
ipaddress.collapse_addresses() 函数的作用是将一系列相邻的子网合并成更大的网络。
这里传入 networks 列表,尝试将其中的两个子网合并。
该函数返回一个迭代器,使用 list() 函数将迭代器转换为列表,存储在 merged_networks 变量中。
'''
merged_networks = list(ipaddress.collapse_addresses(networks))
for net in merged_networks:
print(f"合并后的网络: {net}")
'''
输出:合并后的网络: 192.168.1.0/24
'''
# 拆分网络示例
big_network = ipaddress.ip_network('192.168.0.0/16')
subnets = list(big_network.subnets(prefixlen_diff=2))
'''
big_network.subnets() 是 IPv4Network 对象的一个方法,用于将一个大的网络拆分成多个较小的子网。
prefixlen_diff 参数指定子网掩码前缀长度的增加量。
这里设置为 2,表示将原来 /16 的子网掩码增加 2 位,变为 /18。
该方法返回一个迭代器,使用 list() 函数将其转换为列表,存储在 subnets 变量中。
'''
for subnet in subnets:
print(f"拆分后的子网: {subnet}")
'''
拆分后的子网: 192.168.0.0/18
拆分后的子网: 192.168.64.0/18
拆分后的子网: 192.168.128.0/18
拆分后的子网: 192.168.192.0/18
'''