在main函数里面定义的变量,其他函数中可以调用

  1. def func():
  2. print(foo)
  3. if __name__ == "__main__":
  4. foo = "bar"

在脚本中定义了一个名为foo的全局变量。这个模块的任何函数都可以访问它。
上面列出的代码段是模块的全局代码,而不是在任何函数内部。

1、TypeError: not all arguments converted during string formatting

参考:https://blog.csdn.net/lvsehaiyang1993/article/details/80909984

  • 简单解释:说明前面 % 和后面 参数数量 不对应。
  • 比如将一个集合对象以字符串格式输出时:

    1. strs = (1, 2, 3, 4) # 创建一个元组
    2. print('strs=%s' % strs)
    3. TypeError: not all arguments converted during string formatting
    • 原因是 % 操作符只能直接用于 字符串(‘123’)列表([1,2,3]) ,元组的话因此需要一一匹配操作符。
  • 解决方法:

    1. print 'strs= %s' % (strs,)
    2. strs= (1, 2, 3,4)
    3. 也可以用:
    4. print 'strs= %s,%s,%s,%s' % sstr
    5. strs= 1,2,3,4

    2、TypeError: ‘str’ object does not support item assignment

    1. name = 'xiaohei'
    2. name[-1] = 'e' # 会报上述错误

    字符串一旦创建之后,里面的元素是不可以修改的。但重新赋值是可以的。 name = 'xiaobai'

  • 在python中,字符串是不可变类型,即无法直接修改字符串的某一位字符。

    • 因此改变一个字符串的元素需要新建一个新的字符串。

常见修改方法有如下4种:
1、将字符串转换成列表后修改值,然后用join组成新字符串

  1. >>> s='abcdef' #原字符串
  2. >>> s1=list(s) #将字符串转换为列表
  3. >>> s1
  4. ['a', 'b', 'c', 'd', 'e', 'f'] #列表的每一个元素为一个字符
  5. >>> s1[4]='E' #将列表中的第5个字符修改为E
  6. >>> s1[5]='F' #将列表中的第5个字符修改为E
  7. >>> s1
  8. ['a', 'b', 'c', 'd', 'E', 'F']
  9. >>> s=''.join(s1) #用空串将列表中的所有字符重新连接为字符串
  10. >>> s
  11. 'abcdEF' #新字符串

2、通过字符串序列切片方式

  1. >>> s='Hello World'
  2. >>> s=s[:6] + 'Bital' #s前6个字符串+'Bital'
  3. >>> s
  4. 'Hello Bital'
  5. >>> s=s[:3] + s[8:] #s前3个字符串+s第8位之后的字符串
  6. >>> s
  7. 'Heltal'

3、使用字符串的replace函数

  1. >>> s='abcdef'
  2. >>> s=s.replace('a','A') #用A替换a
  3. >>> s
  4. 'Abcdef'
  5. >>> s=s.replace('bcd','123') #用123替换bcd
  6. >>> s
  7. 'A123ef'

4、重新赋值(整体)

  1. >>> s='Hello World'
  2. >>> s2=' 2017' #变量赋值
  3. >>> s=s+s2
  4. >>> s
  5. 'Hello World 2017'
  6. >>> s='Hello World'
  7. >>> s='Hello World 2017' #重新赋值
  8. >>> s
  9. 'Hello World 2017'

开发中踩坑:一个函数中同时有tab和空格,就会导致报错

如何解决python对齐问题?一个函数中同时有tab和空格,就会导致报错:python unindent does not match any outer indentation level

  • 可以通过在vscode中显示空格和tab符号来排查错误:
    • 打开setting,在搜索框中输入renderControlCharacters,选中勾选框,即可显示tab.
    • 2.在搜索框中输入renderWhitespace,选择all,即可显示空格.