孜然爱爱 发表于 2020-7-15 22:53:35

请问 index = pos 那一行是什么意思呢,大佬能详细的解释一下吗?

本帖最后由 孜然爱爱 于 2020-7-15 22:55 编辑


def get_suffix(filename, has_dot=False):

    """
    获取文件名的后缀名

    :param filename: 文件名
    :param has_dot: 返回的后缀名是否需要带点
    :return: 文件的后缀名
    """
    pos = filename.rfind('.')
    if 0 < pos < len(filename) - 1:
      index = pos if has_dot else pos + 1
      return filename
    else:
      return ''

这个代码除了    pos = filename.rfind('.') 看明白了之外其他的都不太懂
请大神们解答一下,万分感谢!!

Twilight6 发表于 2020-7-15 23:09:58





这里的 has_dot 参数就是为了返回的后缀是否带 .

当 has_dot 为 True 时候,返回的后缀带 .   比如.txt    .py

当 has_dot 为 False 时候,返回的后缀不带 .   比如txt    py

def get_suffix(filename, has_dot=False):

    """
    获取文件名的后缀名

    :param filename: 文件名
    :param has_dot: 返回的后缀名是否需要带点
    :return: 文件的后缀名
    """
    pos = filename.rfind('.')   # 从右往左获取 . 的位置参数
    if 0 < pos < len(filename) - 1:# 只要有找到 . 返回的值一定大于 -1
      index = pos if has_dot else pos + 1 # 三元运算符,如果 has_dot 为 True ,那么返回 pos ,反之返回 pos + 1
      # 其实这个参数的作用就是是否保留 . 如果index = pos + 1 那么就不保留 . 反之如果返回的是 index = pos 那么保留 .
      return filename   
      # 返回后缀,当 has_dot 参数为 True 时候返回带 . 的后缀
      # 当 has_dot 参数为 False 时候返回不带 . 的后缀
    else:
      return ''# 这个就是当 pos = -1的时候 也就是没找到 . 也就没有文件后缀,返回空字符串


孜然爱爱 发表于 2020-7-15 23:31:32

请问大佬:从那面的index可知,rfind('.')应该是从左往右 ‘.’ 的位置数,那为什么说是从右往左获取 . 的位置参数呢?
比如我有一个文件名是1234567.py,从右往左获取 . 的位置不就是2了吗?

孜然爱爱 发表于 2020-7-15 23:32:44

Twilight6 发表于 2020-7-15 23:09
这里的 has_dot 参数就是为了返回的后缀是否带 .

当 has_dot 为 True 时候,返回的后缀带 .    ...


请问大佬:从那面的index可知,rfind('.')应该是从左往右 ‘.’ 的位置数,那为什么说是从右往左获取 . 的位置参数呢?
比如我有一个文件名是1234567.py,从右往左获取 . 的位置不就是2了吗?

Twilight6 发表于 2020-7-15 23:54:00

孜然爱爱 发表于 2020-7-15 23:32
请问大佬:从那面的index可知,rfind('.')应该是从左往右 ‘.’ 的位置数,那为什么说是从右往左获取 . ...



位置参数都是固定的,而不是看你是哪个开始算起的,位置参数都是从左往右正索引从 0 开始

负数索引从右往左 -1 开始

孜然爱爱 发表于 2020-7-16 09:43:25

Twilight6 发表于 2020-7-15 23:54
位置参数都是固定的,而不是看你是哪个开始算起的,位置参数都是从左往右正索引从 0 开始

负数索 ...

明白啦,谢谢大神!
页: [1]
查看完整版本: 请问 index = pos 那一行是什么意思呢,大佬能详细的解释一下吗?