码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python末尾逗号导致返回结果是一个元组


    文章目录

    • python末尾逗号导致返回结果是一个元组
      • 问题描述
      • 问题分析
      • Python中末尾逗号基础

    python末尾逗号导致返回结果是一个元组

    问题描述

    调用的地方

    port = config_manager.get_int('mongo','port'),
    print(type(port)) # 应该打印int,但是打印成了元组
    
    • 1
    • 2

    使用 configparser 解析配置文件,函数定义,
    configparser也提供了一些辅助方法,可以在读取时直接转换,比如:

    • getint() - 获取整数值
    def get_int(self, section, key):
        """获取整数类型的配置值"""
        value = self.config.getint(section, key)
        print(type(value))
        assert isinstance(value, int) 
        return value
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    问题:调用的地方应该打印int,但是打印成了元组

    问题分析

    经过网上查询资料,很多说是 int数据再int转换一次就变成了元组,但是这块明显不符合我的情况。

    最后发现是:末尾逗号导致port变量绑定到一个元组上~

    末尾逗号是一个非常容易被忽视的细节,这次经历也是一个宝贵的学习经历。以后在Python中获取返回值时,一定要注意是否有这种错误。

    Python中末尾逗号基础

    在Python中,如果语句或函数的参数列表中添加了末尾的逗号,会产生一些副作用需要注意:

    1. 返回元组
      如果函数返回多个值,加末尾逗号会使其返回一个元组,而不是多个单独的值。
    def foo():
        return 1, 
    print(foo()) # (1,) 
    
    • 1
    • 2
    • 3
    1. 参数组成元组
      调用函数时参数末尾加逗号,会将参数组装成一个元组。
    def foo(x):
        print(x)
    
    foo(1,) # (1,)
    
    • 1
    • 2
    • 3
    • 4
    1. 元组拆包不正确
      带末尾逗号的元组拆包时,需要处理额外的逗号产生的值。
    values = (1,) 
    a, = values # 会报错
    a, _ = values # 正确拆包方式
    
    • 1
    • 2
    • 3
    1. 函数定义参数错误
      在函数定义中参数带逗号容易造成参数数目错误。
    def foo(x, ): # 会被识别成接收元组的函数
        pass
    
    • 1
    • 2
    1. 多余语法错误
      末尾逗号也可能直接导致语法错误。
    print(1,) print(2) # 错误
    
    • 1

    总结:在Python中,除非特别需要返回或传参元组,一般不推荐在语句末尾添加逗号。应该注意检查是否存在末尾逗号导致的这些副作用。

  • 相关阅读:
    用HTML和CSS打造跨年烟花秀视觉盛宴
    小菜学前端笔记-06-03
    小家电Type-C接口PD诱骗芯片 6500
    python 之xml 使用原生xml.dom
    【牛客刷题-SQL】SQL3 查询结果去重
    在使用SpringBoot时遇到的异常总结(持续更新...)
    19.段页结合的实际内存管理
    聊聊多包管理,杂谈,monorepo
    用Bosch Sensortec的BMI08X传感器API在C语言中控制IMU传感器:一个完整的集成指南
    《统计学习方法》 第二十一章 PageRank算法
  • 原文地址:https://blog.csdn.net/inthat/article/details/132869236
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号