3.10.2作为属性的变量

本文探讨了JavaScript全局变量的实现机制,特别是如何通过不同方式声明全局变量及其可删除性的差异。文章还简要提及了局部变量可能的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当声明一个javascirpt全局变量时,实际上是定义了全局对象的一个属性。当使用一个var声明一个变量时,创建的这个属性是不可配置的。也就是说这个变量无法通过Delete运算符删除。如果你没有使用严格模式并给一个未声明的变量赋值的话,javascirpt会自动创建一个全局变量。以这种方式创建变量是全局对象的正常的可配置属性,并可以删除它们:

var truevar = 1;      //声明一个不可删除的全局变量
fakever = 2;          //创建一个对象是一个可删除的属性
this.fakever2 = 2;    //同上
delete truevar        //=>false: 变量并没有被删除
delete fakever        //=>true:  变量被删除
delete this.fakever2  //=>true:  变量被删除

javascirpt全局变量是全局对象的属性,这是在ECMAscript规范中强制规定的。对于局部变量则没有如此的规定,但我们可以想象的到,局部变量当做函数调用相对的某个对象的属性。ECMAscript规范对象为“调用对象”,ECMAscript称为“声明上下文对象”。javascirpt可以允许使用this关键字来引用全局对象却没有方法可以引用局部变量中存放的对象。这种存放局部变量的对象的特有性质,是一种我们不可见的内部实现。然而这些局部变量对象存在的观念是非常重要的。我们会在下一节展开讲述。

import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from diffprivlib.mechanisms import Laplace from sklearn.model_selection import train_test_split, cross_val_score from sklearn.svm import SVR import joblib # 加载数据 df_a = pd.read_csv(&#39;A_cars.csv&#39;) df_b = pd.read_csv(&#39;B_cars.csv&#39;) df = pd.concat([df_a, df_b], ignore_index=True) # 数据清洗 # 1. 清洗 mileage 列 df[&#39;milage&#39;] = df[&#39;milage&#39;].str.replace(&#39;,&#39;, &#39;&#39;).str.extract(r&#39;(\d+)&#39;).astype(float) # 2. 生成 age 属性(防止除0错误) current_year = 2023 df[&#39;age&#39;] = current_year - df[&#39;model_year&#39;] df.loc[df[&#39;age&#39;] == 0, &#39;age&#39;] = 1 # 将age=0替换为1,避免除0错误 # 3. 生成 mileage_per_year 属性(处理无穷大) df[&#39;mileage_per_year&#39;] = df[&#39;milage&#39;] / df[&#39;age&#39;] df.replace([np.inf, -np.inf], np.nan, inplace=True) # 替换无穷大为NaN # 4. 生成其他属性 df[&#39;is_accident_free&#39;] = df[&#39;accident&#39;].apply(lambda x: &#39;None reported&#39; in str(x)) df[&#39;is_clean_title&#39;] = df[&#39;clean_title&#39;].apply(lambda x: bool(x)) df[&#39;engine_power&#39;] = df[&#39;engine&#39;].str.extract(r&#39;(\d+\.?\d*)\s*HP&#39;).astype(float) df.drop(columns=[&#39;accident&#39;, &#39;clean_title&#39;], inplace=True) # 5. 处理缺失值(改进的鲁棒填充) def robust_fillna(series): # 移除异常值(使用IQR方法) q1 = series.quantile(0.25) q3 = series.quantile(0.75) iqr = q3 - q1 lower_bound = q1 - 1.5 * iqr upper_bound = q3 + 1.5 * iqr # 创建过滤条件 valid_mask = (series >= lower_bound) & (series <= upper_bound) # 确保有有效值可用 if valid_mask.any(): return series.fillna(series[valid_mask].mean()) return series.fillna(0) # 没有有效值时填充0 numeric_columns = [&#39;milage&#39;, &#39;age&#39;, &#39;mileage_per_year&#39;, &#39;engine_power&#39;] for col in numeric_columns: df[col] = robust_fillna(df[col]) # 6. 应用差分隐私(正确实现) epsilon = 1.0 # 隐私预算 for col in numeric_columns: # 计算敏感度(使用全局范围) sensitivity = df[col].max() - df[col].min() laplace = Laplace(epsilon=epsilon, sensitivity=sensitivity) # 为每个值添加噪声 df[col] = df[col].apply(lambda x: laplace.randomise(x)) # 7. 对分类变量进行独热编码 categorical_columns = [&#39;brand&#39;, &#39;model&#39;] df = pd.get_dummies(df, columns=categorical_columns) # 8. 标准化数值特征(添加检查) # 确保没有NaN或无穷大 assert not df[numeric_columns].isnull().values.any(), "存在NaN值" assert not np.isinf(df[numeric_columns].values).any(), "存在无穷大值" scaler = StandardScaler() df[numeric_columns] = scaler.fit_transform(df[numeric_columns]) # 9. 模型训练与评估 X = df.drop(columns=[&#39;price&#39;]) y = df[&#39;price&#39;] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = SVR(kernel=&#39;rbf&#39;, C=1.0, gamma=&#39;scale&#39;) model.fit(X_train, y_train) # 交叉验证 scores = cross_val_score(model, X_train, y_train, cv=5, scoring=&#39;neg_mean_squared_error&#39;) print(f"Cross-validation MSE scores: {-scores}") # 保存结果 joblib.dump(model, &#39;car_price_model.pkl&#39;) df.to_csv(&#39;cleaned_cars_private.csv&#39;, index=False) 运行后: Traceback (most recent call last): File "D:\peixunruanjian0106\python\pythonprojects\cd03\实训开始\二手车(第二周)\data_cleaning.py", line 84, in <module> model.fit(X_train, y_train) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\sklearn\base.py", line 1363, in wrapper return fit_method(estimator, *args, **kwargs) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\sklearn\svm\_base.py", line 197, in fit X, y = validate_data( File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\sklearn\utils\validation.py", line 2971, in validate_data X, y = check_X_y(X, y, **check_params) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\sklearn\utils\validation.py", line 1368, in check_X_y X = check_array( File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\sklearn\utils\validation.py", line 971, in check_array array = array.astype(new_dtype) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\generic.py", line 6643, in astype new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\internals\managers.py", line 430, in astype return self.apply( File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\internals\managers.py", line 363, in apply applied = getattr(b, f)(**kwargs) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\internals\blocks.py", line 758, in astype new_values = astype_array_safe(values, dtype, copy=copy, errors=errors) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\dtypes\astype.py", line 237, in astype_array_safe new_values = astype_array(values, dtype, copy=copy) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\dtypes\astype.py", line 182, in astype_array values = _astype_nansafe(values, dtype, copy=copy) File "D:\peixunruanjian0106\python\python3.10.2\lib\site-packages\pandas\core\dtypes\astype.py", line 133, in _astype_nansafe return arr.astype(dtype, copy=True) ValueError: could not convert string to float: &#39;Gasoline&#39;
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值