V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
oppurst
V2EX  ›  问与答

跪了,要被 Python 的_和.搞崩溃了

  •  
  •   oppurst · 314 天前 · 2190 次点击
    这是一个创建于 314 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位大佬好,

    首先感谢各位大佬能够点开这个弱鸡问题,因为确实挺基础的,让您能花时间看我问什么问题,极有可能会浪费掉您部分宝贵的时间,故而首先致敬🫡

    自己一直在断断续续地自学 Python ,主要是跟着经典入门书籍《 Python 编程:从入门到实践(第 2 版)》在学习。在此之前毫无 coding 的任何基础,加之年纪又上来了,进度奇慢无比,对很多基础的东西理解起来似乎并不容易。目前学到第 19 章,在跟着书籍敲代码的过程中,对_.的使用区别愈发显得迷惑。

    比如下面这段示例代码中,同样是获取topic_id,但是为啥new_entry中是使用的topic_id=topic_id,但是在edit_entry中就变成了topic_id=topic.id

    这个问题网上搜了一圈,没有找到答案,实在是抱歉,要请各位大佬指点迷津!感谢!

    
    def new_entry(request, topic_id):
        """add new post in topic"""
        topic = Topic.objects.get(id=topic_id)
    
        if request.method != 'POST':
            # data not submitted: create new entry form
            form = EntryForm()
        else:
            # POST submitted data: process the data
            form = EntryForm(data=request.POST)
            if form.is_valid():
                new_entry = form.save(commit=False)
                new_entry.topic = topic
                new_entry.save()
                return redirect('learning_logs:topic', topic_id=topic_id)
    
        context = {'topic': topic, 'form': form}
        return render(request, 'learning_logs/new_entry.html', context)
    
    
    def edit_entry(request, entry_id):
        """edit current entry"""
        entry = Entry.objects.get(id=entry_id)
        topic = entry.topic
    
        if request.method != 'POST':
            # first time: use the as-is item to fill form
            form = EntryForm(instance=entry)
        else:
            # POST submitted data: process the data
            form = EntryForm(instance=entry, data=request.POST)
            if form.is_valid():
                form.save()
                return redirect('learning_logs:topic', topic_id=topic.id)
    
        context = {'entry': entry, 'topic': topic, 'form': form}
        return render(request, 'learning_logs/edit_entry.html', context)
    
    27 条回复    2023-06-19 15:22:35 +08:00
    westoy
        1
    westoy  
       314 天前   ❤️ 1
    topic_id 是一个变量, 下划线和其他数字英文一样没其他意思

    topic.id 是 topic 变量指向的对象的 id 属性

    你是基础语法没好好看啊........
    kaiveyoung
        2
    kaiveyoung  
       314 天前 via Android   ❤️ 3
    @westoy 这是没看基础语法
    miyuki
        3
    miyuki  
       314 天前
    topic_id 是函数传进来的参数名
    pi0piK
        4
    pi0piK  
       314 天前
    说实话这个问题,我当年学 python 的时候也有过……原因是面编程入门是学校的 C ,接触 python 的时候没弄明白 "." 的意义,这个问题知道我后来学 Java 才彻底解决😂
    nikenidage1
        5
    nikenidage1  
       314 天前
    所以说 python 并不适合当第一门语言 ┑( ̄Д  ̄)┍
    westoy
        6
    westoy  
       314 天前
    @pi0piK

    但是 c 的 struct 、union 也是通过.访问........
    oppurst
        7
    oppurst  
    OP
       314 天前
    @westoy 好的大佬,我回去再翻翻
    x02
        8
    x02  
       314 天前
    初学者往往忽略了一些最基础的概念, 标识符, 运算符,
    zmaplex
        9
    zmaplex  
       314 天前 via Android
    这个跟年龄没关系叭,之前教过 24 岁的妹子 Python 整得我心态都奔溃了。 就是没计算机基础,学得挺慢的🥲🥲
    kokutou
        10
    kokutou  
       314 天前
    要不...先学下 java 吧...
    kokutou
        11
    kokutou  
       314 天前
    不会没搞个 pycharm 这种 ide 吧...不会在记事本手写吧...
    winterbells
        12
    winterbells  
       314 天前 via Android
    第一次看 jni 也是一样的疑惑,想了很久 -> 是什么玩意儿…
    horizon
        13
    horizon  
       314 天前
    要么,先学下 js ?
    oppurst
        14
    oppurst  
    OP
       314 天前
    @kokutou 谢谢大佬提醒,那倒也不至于,用的 VS Code 😭
    oppurst
        15
    oppurst  
    OP
       314 天前
    @zmaplex 哎,以前感觉自己学东西挺快的,现在发现岁月不饶人啊,特别是从 0 开始
    oppurst
        16
    oppurst  
    OP
       314 天前
    @x02 感觉确实是基础部分翻得太快了,原本想着快速跟着教材敲一遍,先找找手感,现在发现基础部分确实不能草率。感谢各位大佬指教!谢谢!
    oppurst
        17
    oppurst  
    OP
       314 天前
    @horizon 可惜时间精力有限,主要目标是想深入一下深度学习和人工智能相关的技术,所以还是先学会 Python 吧。感谢大佬的建议!
    ecloud
        18
    ecloud  
       314 天前
    看标题我还以为你说__呢(俩),结果是没搞清楚单_跟字母是一回事……

    看这个吧 https://www.runoob.com/w3cnote/python-5-underline.html
    NotFoundEgg
        19
    NotFoundEgg  
       314 天前
    topic_id=topic_id 和 topic_id=topic.id ,等号左侧的是标注出等号右侧的参数赋值给哪个形参( python 函数在调用时,参数顺序是可以乱序的);其中_可以当作普通的字母看待,没有特殊含义;而.代表从对象取值(类似 js )
    westoy
        20
    westoy  
       314 天前
    @oppurst

    我说的直, 你别见怪

    如果你学 python 是为了搞 ai , 那可以放弃了

    学玩手术刀, 玩得再好, 也不是学会给人动手术的路子啊, 你得去先去学人体结构、病理, 上手解剖, 在这个过程中顺便把手术刀玩遛.....

    我们这些会 python 的, 大部分对于 ai 来说也是门外汉, 和你不会 python 的没什么区别的.....
    zrc199021
        21
    zrc199021  
       314 天前
    @winterbells 第一次学 scala ,也是同样的疑惑:-> 到底是啥意思啊,随便一个箭头就是语法?怎么有这么敷衍的语言呢…
    oppurst
        22
    oppurst  
    OP
       314 天前
    @ecloud 谢谢大佬!马上去读
    oppurst
        23
    oppurst  
    OP
       314 天前
    @NotFoundEgg 感谢大佬!逐渐开始明白了,我再回顾梳理一遍几个类和函数之间的逻辑,加深一下理解。
    oppurst
        24
    oppurst  
    OP
       314 天前
    @westoy 不会不会,大佬言重了。虚心向各位大佬求教,任何分享对我来说都是有价值的参考。

    说来凑巧,您举的例子恰好是我之前的一部分职业路径,不过已经跨行很久了。之所以想要研究 AI ,是感觉目前 AI 在医疗领域的应用,还相对缺乏想象力。当然,常规的像是影像诊断、药物早期开发等方面的应用已经相对比较成熟,但是未来的应用场景和技术革新,在潜力上应该还比较巨大,是个不错的发展方向。

    当然,医疗领域纯 AI 应用场景应该不容易带来巨大的增量市场,更多的会是融合性的场景,比如 AI+IoT ,或者配合脑机接口等等。
    huoshen
        25
    huoshen  
       314 天前 via iPhone
    其实建议基础语法看看菜鸟教程之类的,如果你有学习别的语言的经验,大部分情况下语法会了已经会了一大半了,然后再搞应用。
    oppurst
        26
    oppurst  
    OP
       313 天前
    问了 ChatGPT ,居然识别出来了,太牛了:

    在这段代码中,topic_id 是作为参数传递给函数 new_entry 和 edit_entry 的值。它表示一个主题的唯一标识符。

    在 new_entry 函数中,topic_id 是直接使用的,因为它代表传递给函数的参数值。

    在 edit_entry 函数中,entry_id 表示要编辑的条目的唯一标识符。首先,通过使用 entry_id 从数据库中获取相应的 entry 对象。然后,从 entry 对象中获取其所属的 topic 对象,将其赋值给 topic 变量。这里使用 topic.id 是为了获取 topic 对象的唯一标识符,以便在重定向时将其作为参数传递给 learning_logs:topic 视图。

    总结起来:

    topic_id 表示主题的唯一标识符,直接使用其值。
    topic.id 表示主题对象的唯一标识符,用于重定向时传递给视图。
    kokutou
        27
    kokutou  
       313 天前
    @oppurst #14 vscode 和 pycharm 不一样...不是一个级别的...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1330 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:35 · PVG 01:35 · LAX 10:35 · JFK 13:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.