1. 程式人生 > 其它 >Softmax:原理及python實現

Softmax:原理及python實現

本文基於B站尚矽谷的Vue學習教程,推薦大家去觀看。

三種方法層層遞進——實現姓名案例

效果圖:

首先要明確,當data中資料有變化時,Vue的模板頁面會重新解析一遍。

一. 使用插值語法實現

示例程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用插值語法實現姓名案例</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <div id="root">
        姓<input type="text" v-model:value="firstName"><br><br>
        名<input type="text" v-model="lastName"><br><br>
        全名:<span>{{firstName}}-{{lastName}}</span>
    </div>
</body>
    <script type="text/javascript">
        Vue.config.productionTip=false;
        const vm=new Vue({
            el:'#root',
            data:{
                firstName:"張",
                lastName:'三'
            }
        })
    </script>
</html>

缺點:插值方法不夠靈活,不好隨意取firstName和lastName文字框中的值來組成fullName。

二. 使用methods實現

示例程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用methods實現姓名案例</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <div id="root">
        姓<input type="text" v-model:value="firstName"><br><br>
        名<input type="text" v-model="lastName"><br><br>
        全名:<span>{{fullName()}}</span>
    </div>
</body>
    <script type="text/javascript">
        Vue.config.productionTip=false;
        const vm=new Vue({
            el:'#root',
            data:{
                firstName:"張",
                lastName:'三'
            },
            methods:{
                fullName(){
                    return this.firstName + '-' + this.lastName;
                }
            }
        })
    </script>
</html>

缺點:fullName始終是個函式,每次都要重新計算,不夠高效。

三. 使用計算屬性實現

示例程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用計算屬性實現姓名案例</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
<!--
    計算屬性:
    1.定義:要用的屬性不存在,要通過已有屬性計算得來。
    2.原理:底層藉助了objcet.defineproperty方法提供的getter和setter.
    3. get函式什麼時候執行?
    (1).初次讀取時會執行一次。
    (2).當依賴的資料發生改變時會被再次呼叫。
    4.優勢:與methods實現相比,內部有快取機制(複用),效率更高,除錯方便。
    5.備註:
    1.計算屬性最終會出現在vm上,直接讀取使用即可。
    2.如果計算屬性要被修改,那必須寫set函式去響應修改,且set中要引起計算時依賴的資料發生變化
-->
    <div id="root">
        姓<input type="text" v-model:value="firstName"><br><br>
        名<input type="text" v-model="lastName"><br><br>
        全名:<span>{{fullName}}</span>
    </div>
</body>
    <script type="text/javascript">
        Vue.config.productionTip=false;
        const vm=new Vue({
            el:'#root',
            data:{
                firstName:"張",
                lastName:'三'
            },
            computed:{
                fullName:{
                    //讀取fullName時,get會被呼叫,返回值就作為fullName的值
                    // get什麼時候呼叫? 1. 初次讀取fu11Name時。2. 所依賴的資料發生變化時。
                    get(){
                        console.log("get被呼叫了");
                        return this.firstName+'-'+this.lastName;//此處this指向是vm
                    },
                    //當fullName被修改時,set就會被呼叫
                    set(value){
                        console.log('set',value);
                        const arr=value.split('-');
                        this.firstName=arr[0];
                        this.lastName=arr[1];
                    }
                },
                //當不考慮修改,只讀取時可以簡寫如下,直接當做getter函式來用,但fullName本質上還是個屬性
                /*
                fullName(){
                    console.log('get被呼叫來了');
                    return this.firstName+'-'+this.lastName;
                }
                */
            }
        })
    </script>
</html>

計算屬性大部分只讀取,不修改,確實只讀取不修改時就可以簡寫。