百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

6 标识符(标识符正规式)

off999 2024-10-21 07:02 30 浏览 0 评论

标识符是计算机语言中允许作为名字的有效字符串集合。

  • 标识符:保留字,不能用于其他用途,构成语言标识符。
  • 内建(built-in)标识符,这类标识符虽然不是保留字,但在命名时同样不推荐使用这些标识符。

合法的Python标识符

Python的标识符,与C语言类似:

  • 首字符必须是字母或下划线“_”,除下划线外其他符号一律不允许使用;
  • 剩下字符可以是字母、数字或下划线;
  • 大小写敏感,即:user、User、USER三者的含义各不相同;
  • 标识符不能以数字开头。

关键字

Python1.4开始使用的关键字:

and

break

class

continue

def

del

elif

else

except

exec

finally

for

from

global

if

import

in

is

lambda

not

or

pass

print(本身也是内置函数)

raise

return

try

while

  • Python1.4开始废止的关键字:access
  • Python1.5时加入的关键字:assert
  • Python2.3时加入的关键字:yield
  • Python2.4中非关键字常量:None
  • Python2.6时加入的关键字:as、with

内建(built-in)

除关键字外,Python还可以再任何一级代码中使用“内建”的名字计划,这些名字可以由解释器设置或使用。虽然built-in不是关键字,但建议把它当作“系统保留字”,不做他用。而在一些特殊情况下,Python也允许这些关键字被覆盖(重新定义、替换)。Python不支持重载,所以任何时刻都只有一个名字绑定。

在进入Python控制台之前,编译器加载的内容。可以看做是Python代码的全局变量。built-in是__builtins__模块的成员。因此,下述代码可以打印全部的built-in成员。

builtin_list = dir(__builtins__)
for i in range(len(builtin_list)):
    print(builtin_list[i])

输出结果如下:

输出(为了控制篇幅将回车换行符替换成了逗号):

ArithmeticError,AssertionError,AttributeError,BaseException,BlockingIOError,BrokenPipeError,BufferError,BytesWarning,ChildProcessError,ConnectionAbortedError,ConnectionError,ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,Ellipsis,EnvironmentError,Exception,False,FileExistsError,FileNotFoundError,FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,ImportWarning,IndentationError,IndexError,InterruptedError,IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,ModuleNotFoundError,NameError,None,NotADirectoryError,NotImplemented,NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,PermissionError,ProcessLookupError,RecursionError,ReferenceError,ResourceWarning,RuntimeError,RuntimeWarning,StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,SystemExit,TabError,TimeoutError,True,TypeError,UnboundLocalError,UnicodeDecodeError,UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,WindowsError,ZeroDivisionError,__build_class__,__debug__,__doc,import__,__loader__,__name__,__package__,__spec__,abs,all,any,ascii,bin,bool,breakpoint,bytearray,bytes,callable,chr,classmethod,compile,complex,copyright,credits,delattr,dict,dir,divmod,enumerate,eval,exec,exit,filter,float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,int,isinstance,issubclass,iter,len,license,list,locals,map,max,memoryview,min,next,object,oct,open,ord,pow,print,property,quit,range,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,sum,super,tuple,type,vars,zip

可见,Python的内置函数非常丰富,使用得当可以大大提升开发效率,下面就整理部分内置函数进行分类总结。

1)数值运算

  • abs(x):返回x的绝对值
  • int(x):将x转换为整数类型
  • float(x):将x转换为浮点数类型
  • round(x, n):对x进行四舍五入,保留n位小数
  • divmod(x, y):返回x除以y的商和余数,以元组的形式返回

2)序列操作

序列操作指的是对列表、元组、字符串等序列类型的操作,Python的内置函数提供了多种序列操作方法,包括以下函数:

  • len(seq):返回序列seq的长度
  • max(seq):返回序列seq的最大值
  • min(seq):返回序列seq的最小值
  • sum(seq):返回序列seq的元素求和
  • any(seq):如果序列seq中任何一个元素为True,则返回True,否则返回False
  • all(seq):如果序列seq中所有元素为True,则返回True,否则返回False

3)文件操作

  • open(file, mode):打开文件,返回文件对象
  • close():关闭文件
  • read(size):从文件中读取最多size个字符,并返回字符串
  • readline():读取文件中当前行,并返回字符串
  • write(str):向文件中写入字符串str

4)字符串操作

  • ord(c):返回字符c的Unicode码
  • chr(i):返回Unicode码为i的字符
  • str.upper():将字符串中的所有字母都转换为大写字母
  • str.lower():将字符串中的所有字母都转换为小写字母
  • str.capitalize():将字符串的首字母大写
  • str.strip():删除字符串两端的空格,并返回新字符串

5)模块操作

  • dir():返回当前模块中定义的所有变量、函数和类名
  • globals():返回当前模块中全局变量的字典
  • locals():返回当前作用域中的局部变量的字典
  • import(name[, globals[, locals[, fromlist]]]):导入其他模块中的变量
  • reload(module):重新加载模块

专用下划线标识符

Python用下划线作为变量前缀、后缀指定的特殊变量具有特殊含义。

1)_xxx

_xx:这样的对象叫做保护变量,不能用’from module import *'导入。以单个下划线开头命名的方法或者变量,就是说明它是仅提供内部使用的。如下述样例代码:

在Demo1中构造两个方法:

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

def _say_hello():
    print("_say hello")

在Demo2中,引入Demo1,直接调用该方法,在比较先进的编译器中会直接提示未定义_say_hello()方法。即使不提示,运行时也同样会报错。

from Demo1 import *
say_hello()
_say_hello()

2)__xxx

__xxx:类中的私有成员,只有类对象自己的函数中能访问。

下述样例代码,请参考注释。

class A():
    def __init__(self):
        self.__salary = 12000

    def afun(self):
        # 在类本身的函数中访问双下划线开头的变量
        print(self.__salary)

class Aa(A):
    def __init__(self):
        super().__init__()

a = A()
aa = Aa()
# 类对象本身调用自己的函数
a.afun()  # pass 类可以通过本身的方法访问自己的成员变量
aa.afun() # pass 子类可以通过继承的父类方法访问父类的成员变量
a.__salary # NG 类对象不可以直接通过变量名进行访问

3)__xxx___

__xxx__系统自定义名称,都是一些特殊的属性和方法。被称为"魔术方法"或"特殊方法"。这些方法和属性在类定义和实例化过程中有特定的用途。

  1. 初始化和销毁
    • __init__(self, ...):对象初始化方法(构造函数)。
    • __del__(self):对象销毁方法(析构函数)。
  1. 字符串表示
    • __str__(self):定义对象的字符串表示,print() 函数调用。
    • __repr__(self):定义对象的官方字符串表示,repr() 函数和交互式解释器调用。
  1. 算术运算符
    • __add__(self, other):定义加法运算+。
    • __sub__(self, other):定义减法运算-。
    • __mul__(self, other):定义乘法运算*。
    • __truediv__(self, other):定义真除法运算/。
    • __floordiv__(self, other):定义地板除法运算//。
    • __mod__(self, other):定义取模运算%。
    • __pow__(self, other[, modulo]):定义指数运算**。
    • __and__(self, other):定义按位与运算&。
    • __or__(self, other):定义按位或运算|。
    • __xor__(self, other):定义按位异或运算^。
    • __lshift__(self, other):定义左移运算 <<。
    • __rshift__(self, other):定义右移运算 >>。
  1. 比较运算符
    • __eq__(self, other):定义等于运算 ==。
    • __ne__(self, other):定义不等于运算 !=。
    • __lt__(self, other):定义小于运算 <。
    • __le__(self, other):定义小于或等于运算 <=。
    • __gt__(self, other):定义大于运算 >。
    • __ge__(self, other):定义大于或等于运算 >=。
  1. 容器类型
    • __len__(self):定义对象的长度,len() 函数调用。
    • __getitem__(self, key):定义获取元素的方法,obj[key] 语法调用。
    • __setitem__(self, key, value):定义设置元素的方法,obj[key] = value 语法调用。
    • __delitem__(self, key):定义删除元素的方法,del obj[key] 语法调用。
    • __iter__(self):定义迭代器对象,iter() 函数和循环调用。
    • __next__(self):定义下一个元素,next() 函数调用。
  1. 对象属性
    • __getattr__(self, name):定义获取属性时的行为。
    • __setattr__(self, name, value):定义设置属性时的行为。
    • __delattr__(self, name):定义删除属性时的行为。
    • __getattribute__(self, name):定义获取任何属性时的行为。
    • __dir__(self):定义对象的属性列表,dir() 函数调用。
  1. 上下文管理
    • __enter__(self):定义进入上下文管理器时的行为,with 语句调用。
    • __exit__(self, exc_type, exc_value, traceback):定义退出上下文管理器时的行为,with 语句调用。
  1. 其他常见魔术方法
    • __call__(self, ...):定义对象调用的行为,使对象可以像函数一样调用。
    • __contains__(self, item):定义成员测试运算 in。
    • __bool__(self):定义对象的布尔值,bool() 函数调用。
    • __hash__(self):定义对象的哈希值,hash() 函数调用。
    • __format__(self, format_spec):定义对象的格式化行为,format() 函数和格式化字符串调用。
  1. __name__:每个Python模块(即每个Python文件)都有一个内置变量 __name__。当一个模块被直接运行时,__name__ 的值被设为 "__main__"。当一个模块被另一个模块导入时,__name__ 的值是模块的名字(通常是文件名,不带扩展名)。因此模块的入口多使用下述的表达式:
if __name__ == "__main__":
    main()
  1. __doc__:一个特殊的属性,用于存储对象的文档字符串(docstring)。文档字符串是一种用于解释模块、类、方法或函数用途的字符串,通常写在定义的开头。文档字符串有助于提高代码的可读性和可维护性,使开发者能够更容易地理解和使用代码。文档字符串通常使用三引号('''""")来定义,可以跨多行书写。

下述样例代码可以打印方法的__doc__属性。输出结果从略。

class Calculator:
    """
    一个简单的计算器类。
    包含加法和减法运算。
    """

    def add(self, a, b):
        """返回两个数的和。"""
        return a + b

    def subtract(self, a, b):
        """返回两个数的差。"""
        return a - b


def multiply(a, b):
    """
    返回两个数的乘积。

    参数:
    a -- 第一个数
    b -- 第二个数

    返回值:
    两个数的乘积
    """
    return a * b


if __name__ == '__main__':
    print(Calculator.add.__doc__)  # 输出:返回两个数的和。
    print(Calculator.__doc__)  # 输出:一个简单的计算器类。包含加法和减法运算。
    print(multiply.__doc__)  # 输出:返回两个数的乘积。

下述样例,在mymodule.py中定义各种__doc__属性。

"""
这是一个示例模块。
它包含了一些基本的函数。
"""
def foo():
    """这是一个示例函数。"""
    return "Hello, World!"

另一个py文件中引用mymodule.py,即可以对该文件内的__doc__属性进行打印。输出结果从略。

import mymodule

print(mymodule.__doc__)  # 输出:这是一个示例模块。它包含了一些基本的函数。
print(mymodule.foo.__doc__)  # 输出:这是一个示例函数。

相关推荐

Linux 网络协议栈_linux网络协议栈

前言;更多学习资料(包含视频、技术学习路线图谱、文档等)后台私信《资料》免费领取技术点包含了C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,Z...

揭秘 BPF map 前生今世_bpfdm

1.前言众所周知,map可用于内核BPF程序和用户应用程序之间实现双向的数据交换,为BPF技术中的重要基础数据结构。在BPF程序中可以通过声明structbpf_map_def...

教你简单 提取fmpeg 视频,音频,字幕 方法

ffmpeg提取视频,音频,字幕方法(HowtoExtractVideo,Audio,SubtitlefromOriginalVideo?)1.提取视频(ExtractVi...

Linux内核原理到代码详解《内核视频教程》

Linux内核原理-进程入门进程进程不仅仅是一段可执行程序的代码,通常进程还包括其他资源,比如打开的文件,挂起的信号,内核内部的数据结构,处理器状态,内存地址空间,或多个执行线程,存放全局变量的数据段...

Linux C Socket UDP编程详解及实例分享

1、UDP网络编程主要流程UDP协议的程序设计框架,客户端和服务器之间的差别在于服务器必须使用bind()函数来绑定侦听的本地UDP端口,而客户端则可以不进行绑定,直接发送到服务器地址的某个端口地址。...

libevent源码分析之bufferevent使用详解

libevent的bufferevent在event的基础上自己维护了一个buffer,这样的话,就不需要再自己管理一个buffer了。先看看structbufferevent这个结构体struct...

一次解决Linux内核内存泄漏实战全过程

什么是内存泄漏:程序向系统申请内存,使用完不需要之后,不释放内存还给系统回收,造成申请的内存被浪费.发现系统中内存使用量随着时间的流逝,消耗的越来越多,例如下图所示:接下来的排查思路是:1.监控系统中...

彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏

作为C/C++开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C++语言的特性引起的。C/C++语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成...

linux网络编程常见API详解_linux网络编程视频教程

Linux网络编程API函数初步剖析今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。1、socket(family...

Linux下C++访问web—使用libcurl库调用http接口发送解析json数据

一、背景这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。 现在的情形是远程服务端的接口参数和返回类型都是json的字符...

平衡感知调节:“系统如人” 视角下的架构设计与业务稳定之道

在今天这个到处都是数字化的时代,系统可不是一堆冷冰冰的代码。它就像一个活生生的“数字人”,没了它,业务根本转不起来。总说“技术要为业务服务”,但实际操作起来问题不少:系统怎么才能快速响应业务需求?...

谈谈分布式文件系统下的本地缓存_什么是分布式文件存储

在分布式文件系统中,为了提高系统的性能,常常会引入不同类型的缓存存储系统(算法优化所带来的的效果可能远远不如缓存带来的优化效果)。在软件中缓存存储系统一般可分为了两类:一、分布式缓存,例如:Memca...

进程间通信之信号量semaphore--linux内核剖析

什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠...

Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门

一、前言在推流领域,尤其是监控行业,现在主流设备基本上都是265格式的视频流,想要在网页上直接显示监控流,之前的方案是,要么转成hls,要么魔改支持265格式的flv,要么265转成264,如果要追求...

30 分钟搞定 SpringBoot 视频推拉流!实战避坑指南

30分钟搞定SpringBoot视频推拉流!实战避坑指南在音视频开发领域,SpringBoot凭借其快速开发特性,成为很多开发者实现视频推拉流功能的首选框架。但实际开发中,从环境搭建到流处理优...

取消回复欢迎 发表评论: