set(BINNAME "aaa_bbb") 会自动去掉下划线吗
时间: 2023-07-21 20:04:31 浏览: 87
不会自动去掉下划线。`set(BINNAME "aaa_bbb")` 会将变量 `BINNAME` 的值设置为 `"aaa_bbb"`,包括下划线。如果要去掉下划线,可以使用字符串替换函数 `string(REPLACE ...)`,例如:
```
set(BINNAME "aaa_bbb")
string(REPLACE "_" "" BINNAME_WITHOUT_UNDERSCORES ${BINNAME})
message("BINNAME_WITHOUT_UNDERSCORES: ${BINNAME_WITHOUT_UNDERSCORES}")
```
这段代码会输出 `BINNAME_WITHOUT_UNDERSCORES: aaabbb`。
相关问题
__set_name__
`__set_name__` 是一个特殊方法(dunder method),在 Python 3.6 中引入。它用于在描述符类中设置属性的名称。
当一个描述符类被定义为另一个类的属性时,`__set_name__` 方法会被调用,并传入两个参数:描述符实例本身以及包含该描述符的类的名称。
以下是一个示例:
```python
class MyDescriptor:
def __set_name__(self, owner, name):
print(f"Setting attribute name: {name} in class: {owner.__name__}")
class MyClass:
attr = MyDescriptor()
```
在上面的示例中,当 `MyDescriptor` 描述符类作为 `MyClass` 类的属性 `attr` 时,`__set_name__` 方法会被调用。它会打印出属性的名称和包含该属性的类的名称。
注意:`__set_name__` 方法只在描述符类作为其他类的属性定义时才会被调用。它允许描述符类知道自己被赋予了哪个属性名称,并且可以在需要时进行相应的处理。
LOGGER = set_logging(__name__)
这个引用中的代码片段看起来像是Python中的日志记录器设置。在Python中,日志记录器是一个对象,它允许你将日志消息发送到不同的目标,例如控制台或文件。下面是一个类似的示例,展示如何使用`set_logging`函数来设置日志记录器:
```python
import logging
def set_logging(name: str):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)
return logger
LOGGER = set_logging(__name__)
```
在这个示例中,`set_logging`函数接受一个字符串参数`name`,它将被用作日志记录器的名称。函数中的第一行创建了一个名为`logger`的日志记录器对象,该对象使用了传入的名称。接下来,我们设置了日志记录器的日志级别为`DEBUG`,这意味着它将记录所有级别的日志消息。然后,我们创建了一个格式化程序,它将用于格式化日志消息。接下来,我们创建了一个`StreamHandler`对象,该对象将日志消息发送到控制台。我们将其日志级别设置为`DEBUG`,以便它记录所有级别的日志消息。最后,我们将`StreamHandler`对象添加到日志记录器中,并返回该记录器对象。
在最后一行,我们使用`set_logging`函数来创建一个名为`LOGGER`的日志记录器对象,该对象使用了`__name__`作为其名称。这个名称通常是模块的名称,因为在Python中,每个模块都有一个`__name__`属性,它包含了模块的名称。这个日志记录器现在可以在整个模块中使用,以记录各种级别的日志消息。
阅读全文