- 主题:格式化字符串提问
需求:
一个dict,包含多个字段要输出,但是字段也可能不存在
(姓、名、用户名)
这种情况下,如何用最短的方法生成一个“欢迎谁谁来访”的字符串,把三个字段拼进去
,但是不用if指令?
--
FROM 139.227.19.*
fstring配合dict.get方法?
【 在 JulyClyde 的大作中提到: 】
: 需求:
: 一个dict,包含多个字段要输出,但是字段也可能不存在
: (姓、名、用户名)
: ...................
--
FROM 61.149.70.142
>>> a = {}
>>> a.get('k1', 'n')
'n'
>>> r = '欢迎%s来访' % (a.get('k2', '楼主是不是s'), )
>>> r
'欢迎楼主是不是s来访'
【 在 annals 的大作中提到: 】
: fstring配合dict.get方法?
--
FROM 219.236.233.*
就是用dict的get方法的default来实现?
看起来不错
那我还有个需求
用户名那字段,如果用户名存在,前边需要加个at符号;如果用户名不存在,则连用户名
都at符号都不写
这种怎么搞呢?
【 在 kawolu 的大作中提到: 】
: >>> a = {}
: >>> a.get('k1', 'n')
: 'n'
: ...................
--
FROM 139.227.19.*
去搜py的三目运算符
自己先把语言的语法学一遍
【 在 JulyClyde 的大作中提到: 】
: 就是用dict的get方法的default来实现?
: 看起来不错
: 那我还有个需求
: ...................
--
FROM 219.236.233.*
我说了不用if呀
【 在 kawolu 的大作中提到: 】
: 去搜py的三目运算符
: 自己先把语言的语法学一遍
--
FROM 139.227.19.*
那就只能用点奇技淫巧的bool运算了。
Py里面语法糖很多,掌握了看着很炫,但是非常影响代码可读性
【 在 JulyClyde 的大作中提到: 】
: 我说了不用if呀
--
FROM 219.236.233.*
你的需求以及比较复杂了,建议写个wrap或者mixin吧,给dict套一层
【 在 JulyClyde 的大作中提到: 】
:
: 需求:
: 一个dict,包含多个字段要输出,但是字段也可能不存在
: (姓、名、用户名)
: 这种情况下,如何用最短的方法生成一个“欢迎谁谁来访”的字符串,把三个字段拼进去
#发自zSMTH@CDU.MP
--
FROM 171.118.67.*
【 在 JulyClyde 的大作中提到: 】
: 就是用dict的get方法的default来实现?
: 看起来不错
: 那我还有个需求
: ...................
当然,如果你不想将逻辑暴露在python代码,可以考虑放在cython中
1.创建at.c文件
#include <stdio.h>
#include <stdlib.h>
void generate_welcome_message(char *username, char *result) {
if (username[0]) {
sprintf(result, "@%s", username);
} else {
result[0] = '\0';
}
}
2.bash命令生成so文件
gcc -shared -o libat.so -fPIC at.c
3.调用so文件
import ctypes
# 加载动态链接库
lib = ctypes.CDLL("./libat.so")
name = "zhangsan"
# 定义函数参数和返回类型
lib.generate_welcome_message.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
lib.generate_welcome_message.restype = None
# 调用C语言库中的函数生成欢迎消息字符串
result_buffer = ctypes.create_string_buffer(100) # 分配一个缓冲区用于存储结果
lib.generate_welcome_message(name.encode(), result_buffer) # 传入用户名参数
# 获取结果并打印欢迎消息字符串
welcome_msg = result_buffer.value.decode("utf-8")
print(welcome_msg)
--
FROM 223.199.20.*