鱼C论坛

 找回密码
 立即注册
查看: 2450|回复: 7

[已解决]print(value, ..., sep=' ', end='\n', )

[复制链接]
发表于 2023-3-23 20:50:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
根据英文:sep是分隔,end是结尾,所以我一直认为:

favorite = ‘Fishc’
for i in favorite:
        print(i, sep = '&')


的返回值应该是:

F&i&s&h&c


但实际返回结果却不像我理解的那样……
最佳答案
2023-3-23 20:55:12
sep 参数是用于 print() 函数在打印多个参数时分隔它们的。然而,你的例子中,print() 函数只打印了一个参数,即 i。所以 sep 参数在这里并没有起作用。

如果你想实现你想要的那个效果,可以用 * 把 favorite 解包成多个参数

示例代码:
favorite = 'Fishc'
print(*favorite, sep='&')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-23 20:55:12 | 显示全部楼层    本楼为最佳答案   
sep 参数是用于 print() 函数在打印多个参数时分隔它们的。然而,你的例子中,print() 函数只打印了一个参数,即 i。所以 sep 参数在这里并没有起作用。

如果你想实现你想要的那个效果,可以用 * 把 favorite 解包成多个参数

示例代码:
favorite = 'Fishc'
print(*favorite, sep='&')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 21:27:45 | 显示全部楼层
isdkz 发表于 2023-3-23 20:55
sep 参数是用于 print() 函数在打印多个参数时分隔它们的。然而,你的例子中,print() 函数只打印了一个参 ...

感谢指点。

1、print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
   
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

上面红色字体我错误理解成了‘sep:插入一个变量之间的字符串,默认是一个空格’,正确理解应该是‘sep:插入几个变量之间的字符串,默认是一个空格’

2、用 * 把 favorite 解包成多个参数----解包在这是什么意思?不太理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-23 21:32:19 | 显示全部楼层
lzb1001 发表于 2023-3-23 21:27
感谢指点。

1、print(...)

关于解包(unpacking)的概念,这是Python中一种特殊的语法。当我们在函数调用时使用星号(*)操作符,它会将一个可迭代对象(如列表或元组)“解包”成多个单独的参数。这样,我们可以将一个可迭代对象的元素作为多个独立的参数传递给函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 21:48:14 | 显示全部楼层
本帖最后由 lzb1001 于 2023-3-23 21:51 编辑
isdkz 发表于 2023-3-23 21:32
关于解包(unpacking)的概念,这是Python中一种特殊的语法。当我们在函数调用时使用星号(*)操作符,它 ...


>>> favorite = ‘Fishc’

>>> print(*favorite, sep='&')
F&i&s&h&c

>>> print(**favorite, sep='&')
Traceback (most recent call last):
  File "<pyshell#72>", line 1, in <module>
    print(**favorite, sep='&')
TypeError: print() argument after ** must be a mapping, not str # 返回错误提示:**后面的参数必须是一个映射,而不能是一个字符串

然而我测试如下时:

>>> a = {'one':1, 'two':2}

>>> print(a)
{'one': 1, 'two': 2}

>>> print(*a, sep = '&')
one&two # 为何返回结果仅仅是key键,而不包含value值?

>>> print(**a, sep = '&') # 为何返回错误提示?
Traceback (most recent call last):
  File "<pyshell#80>", line 1, in <module>
    print(**a, sep = '&')
TypeError: 'one' is an invalid keyword argument for print()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 21:57:34 | 显示全部楼层
isdkz 发表于 2023-3-23 21:32
关于解包(unpacking)的概念,这是Python中一种特殊的语法。当我们在函数调用时使用星号(*)操作符,它 ...

print(*favorite, sep='&')

*的作用实际相当于把favorite = ‘Fishc’中F i s h c这五个字符传入print函数作为五个变量

是这样理解的吗?不知道这样表述有无错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-23 21:58:39 | 显示全部楼层
lzb1001 发表于 2023-3-23 21:48
>>> favorite = ‘Fishc’

>>> print(*favorite, sep='&')

1、为何返回结果仅仅是key键,而不包含value值

因为字典这个可迭代对象迭代出来的是键

2、为何返回错误提示?

因为 ** 会将字典解包成关键字参数,而 print 是不接受参数名为 one 和 two 的关键字参数的

你想打印值的话可以用以下代码:
a = {'one':1, 'two':2}
print(*a.values(), sep = '&')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-23 21:59:44 | 显示全部楼层
lzb1001 发表于 2023-3-23 21:57
print(*favorite, sep='&')

*的作用实际相当于把favorite = ‘Fishc’中F i s h c这五个字符传入print ...

对的,

* 会解包出可迭代对象的每个元素来作为函数的位置参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表