Python訓練打卡Day26

函數專題1函數定義參數

知識點回顧:

  1. 函數的定義
  2. 變量作用域:局部變量和全局變量
  3. 函數的參數類型:位置參數、默認參數、不定參數
  4. 傳遞參數的手段:關鍵詞參數
  5. 傳遞參數的順序:同時出現三種參數類型時

到目前為止,我們已經使用了許多Python內置的函數(如 print(), len(), sum(), range())以及各種庫(如NumPy, Pandas)提供的函數。這些函數就像是別人為我們準備好的工具。今天,我們將學習如何創建自己的工具——自定義函數。

函數的定義

函數的基本寫法如下所示:

def function_name(parameter1, parameter2, ...):"""Docstring: 描述函數的功能、參數和返回值 (可選但強烈推薦)"""# 函數體: 實現功能的代碼# ...return value # 可選,用于返回結果

- def: 關鍵字,表示開始定義一個函數。

- function_name: 函數的名稱,應遵循Python的命名約定(通常是小寫字母和下劃線,例如 calculate_area,用英文單詞含義和下劃線來作為函數名)。

- parameter1, parameter2, ...: 函數的參數(也叫形參),是函數在被調用時接收的輸入值。參數是可選的。

- (): 參數列表必須放在圓括號中,即使沒有參數,括號也不能省略。

- : 冒號表示函數定義的頭部結束,接下來是縮進的函數體。

- Docstring (文檔字符串): 位于函數定義第一行的多行字符串(通常用三引號 """Docstring goes here""")。用于解釋函數的作用、參數、返回值等。可以通過 help(function_name) 或 function_name.__doc__ 查看。這個寫法可選,為了后續維護和查看,建議加上這一段更加規范

- 函數體 (Function Body): 縮進的代碼塊,包含實現函數功能的語句。

- return value: return 語句用于從函數中返回一個值。如果函數沒有 return 語句,或者 return 后面沒有值,它會自動返回 None。一個函數可以有多個 return 語句(例如在不同的條件分支中)。

不帶參數的函數?
# 定義一個簡單的問候函數
def greet():"""打印一句問候語。"""message = "大家好!歡迎學習Python函數定義!"print(message)greet()
# 查看文檔字符串,方便查看函數的使用,這個方法可以不掌握
print(greet.__doc__)
# 實際上,當你在py文件中,鼠標懸停在函數上按住ctrl即可點擊函數跳轉到其內部查看函數的定義
帶參數的函數

函數的參數我們有如下稱呼:

- Parameters (形參): 在函數定義中列出的變量名 (如 name, feature1, feature2)。

- Arguments (實參): 在函數調用時傳遞給函數的實際值 (如 "張三", 10, 25),也就是實際的數值(實參)傳給了 形參(定義時候的變量)

注意點: 定義的時候把函數的參數稱之為形參,調用的時候把函數的參數稱之為實參。

# 定義一個帶一個參數的問候函數
def greet_person(name):"""根據給定的名字打印問候語。Args:name (str): 要問候的人的名字。"""message = f"你好, {name}! 很高興認識你。"print(message)greet_person("張三")  # 輸出: 你好, 張三! 很高興認識你。
# 定義一個帶多個參數的函數 (例如,在機器學習中計算兩個特征的和)
def add_features(feature1, feature2):"""計算兩個數值特征的和。Args:feature1 (float or int): 第一個特征值。feature2 (float or int): 第二個特征值。"""total = feature1 + feature2print(f"{feature1} + {feature2} = {total}")add_features(10, 25)       # 輸出: 10 + 25 = 35
帶返回值的函數
# 定義一個計算和并返回結果的函數
def calculate_sum(a, b):"""計算兩個數的和并返回結果。Args:a (float or int): 第一個數。b (float or int): 第二個數。Returns:float or int: 兩個數的和。"""result = a + breturn resultprint("hhh")calculate_sum(2, 3)

此時,注意到,print("hhh")這個代碼并沒有被執行,因為函數在遇到return語句時,就會立即返回,而不會繼續執行函數后面的代碼。

其次,如果沒有return語句,或者return后面不帶任何參數,那么函數也會返回None(不要把執行的操作理解為返回值)。

# 函數可以返回多種類型的數據,包括列表、字典等
# 例如,在數據預處理中,一個函數可能返回處理后的特征列表
def preprocess_data(raw_data_points):"""模擬數據預處理,例如將所有數據點乘以2。Args:raw_data_points (list): 原始數據點列表。Returns:list: 處理后的數據點列表。"""processed = []for point in raw_data_points:processed.append(point * 2) # 假設預處理是乘以2return processeddata = [1, 2, 3, 4, 5]
processed_data = preprocess_data(data)print(f"原始數據: {data}")
print(f"預處理后數據: {processed_data}") # 輸出: [2, 4, 6, 8, 10]

變量作用域

理解變量在何處可見和可訪問非常重要。

- 局部變量 (Local Variables): 在函數內部定義的變量,只在該函數內部有效。當函數執行完畢后,局部變量通常會被銷毀。

- 全局變量 (Global Variables): 在所有函數外部定義的變量,可以在程序的任何地方被訪問(但在函數內部修改全局變量需要特殊聲明,如 global 關鍵字,初學階段可以先避免)。

print("\n--- 變量作用域示例 ---")
global_var = "我是一個全局變量"def scope_test():local_var = "我是一個局部變量"print(f"在函數內部,可以看到局部變量: '{local_var}'")print(f"在函數內部,也可以看到全局變量: '{global_var}'")# global_var = "嘗試在函數內修改全局變量" # 如果沒有 global 聲明,這會創建一個新的局部變量 global_var# print(f"在函數內部,修改后的 '全局' 變量: '{global_var}'")scope_test()print(f"\n在函數外部,可以看到全局變量: '{global_var}'")

?函數的參數類型

在我們ctrl跳轉到一些函數內部的時候,會發現寫法相對我們日常定義的簡單函數更加復雜,主要是參數形式比較豐富

參數有以下類型:

- 位置參數 (Positional Arguments): 調用時按順序匹配。

- 默認參數值 (Default Parameter Values): 定義函數時給參數指定默認值,調用時如果未提供該參數,則使用默認值。

- 可變數量參數 (*args 和 **kwargs):

? ? - *args: 將多余的位置參數收集為一個元組。

? ? - **kwargs: 將多余的關鍵字參數收集為一個字典。

可能你還聽過關鍵字參數 (Keyword Arguments)這個說法,但是他并非是一種參數,而是一種傳遞參數的手段: 調用時通過 參數名=值 的形式指定,可以不按順序。他可以傳位置參數的值,也可以傳默認參數的值,也可以傳可變參數的值,也可以傳關鍵字參數的值。為了可讀性,更推薦對所有參數均采取關鍵字參數傳遞。

位置參數
def describe_pet(animal_type, pet_name):"""顯示寵物的信息。"""print(f"\n我有一只 {animal_type}.")print(f"我的 {animal_type} 的名字叫 {pet_name.title()}.")describe_pet("貓", "咪咪") # 使用關鍵字參數,順序不重要

為了可讀性,更推薦對所有參數采取關鍵詞參數的寫法

#假設一個復雜的繪圖函數
plot_data(data, x_col, y_col, "blue", "-", True, False, "My Plot", "X-axis", "Y-axis") # 不清晰使用關鍵字參數
plot_data(data=my_data, x_column='time', y_column='value',color='blue', linestyle='-', show_grid=True, use_log_scale=False,title="My Awesome Plot", xlabel="Time (s)", ylabel="Value") # 非常清晰

當一個函數有很多參數時,如果只用位置參數,調用者可能需要反復查看函數定義才能確定每個參數的含義。使用關鍵字參數,每個值的含義都通過其前面的參數名清晰地標示出來。

默認參數

注意點:帶默認值的參數必須放在沒有默認值的參數之后

def describe_pet_default(pet_name, animal_type="狗"): # animal_type 有默認值"""顯示寵物的信息,動物類型默認為狗。"""print(f"我有一只 {animal_type}.")print(f"我的 {animal_type} 的名字叫 {pet_name.title()}.")describe_pet_default(pet_name="小黑") # animal_type 使用默認值 "狗"
describe_pet_default(pet_name="雪球", animal_type="倉鼠") # 提供 animal_type,覆蓋默認值
# 注意:帶默認值的參數必須放在沒有默認值的參數之后
*args (收集位置參數)

*args: 將多余的位置參數收集為一個元組。

????????當函數被調用時,Python 會先嘗試用調用時提供的位置參數去填充函數定義中所有明確定義的、非關鍵字的形參 (也就是那些普通的,沒有 * 或 ** 前綴的參數,包括有默認值的和沒有默認值的)。

????????如果在填充完所有這些明確定義的形參后,調用時還有剩余的位置參數,那么這些“多余的”位置參數就會被收集起來,形成一個元組 (tuple),并賦值給 *args 指定的那個變量(通常就是 args)。

????????如果調用時提供的位置參數數量正好等于或少于明確定義的形參數量(且滿足了所有必需參數),那么 *args 就會是一個空元組 ()。

def make_pizza(size, *toppings):"""概述要制作的比薩。*toppings 會將所有額外的位臵參數收集到一個元組中。"""print(f"\n制作一個 {size} 寸的比薩,配料如下:")if toppings: # 只要toppings不為空元組,就會執行for topping in toppings:print(f"- {topping}")else:print("- 原味 (無額外配料)")make_pizza(12, "蘑菇")
make_pizza(16, "香腸", "青椒", "洋蔥")
make_pizza(9) # toppings 會是空元組
?**kwargs (收集關鍵字參數)

**kwargs: 將多余的關鍵字參數收集為一個字典。

????????當函數被調用時,Python 會先處理完所有的位置參數(包括填充明確定義的形參和收集到 *args 中)。

????????然后,Python 會看調用時提供的關鍵字參數 (形如 name=value)。它會嘗試用這些關鍵字參數去填充函數定義中所有與關鍵字同名的、明確定義的形參(這些形參可能之前沒有被位置參數填充)。

????????如果在填充完所有能通過名字匹配上的明確定義的形參后,調用時還有剩余的關鍵字參數(即這些關鍵字參數的名字在函數定義中沒有對應的明確形參名),那么這些“多余的”關鍵字參數就會被收集起來,形成一個字典 (dictionary),并賦值給 **kwargs 指定的那個變量(通常就是 kwargs)。

????????如果調用時提供的所有關鍵字參數都能在函數定義中找到對應的明確形參名,那么 **kwargs 就會是一個空字典 {}。

def build_profile(first_name, last_name, **user_info):"""創建一個字典,其中包含我們知道的有關用戶的一切。**user_info 會將所有額外的關鍵字參數收集到一個字典中。"""profile = {}profile['first_name'] = first_nameprofile['last_name'] = last_namefor key, value in user_info.items():profile[key] = valuereturn profileuser_profile = build_profile('愛因斯坦', '阿爾伯特',location='普林斯頓',field='物理學',hobby='小提琴')
print(f"\n用戶信息: {user_profile}")
# 輸出: {'first_name': '愛因斯坦', 'last_name': '阿爾伯特', 'location': '普林斯頓', 'field': '物理學', 'hobby': '小提琴'}

*args 和 **kwargs 的核心目的是讓函數能夠接收不定數量的參數,并以元組和字典的形式在函數內部進行處理。

也就是說 當位置參數用完了 就自動變成*args,當關鍵詞參數用完了 就自動變成**kwarges

# 同時出現 *args 和 **kwargs,注意參數的傳入順序
def process_data(id_num, name, *tags, status="pending", **details): # 注意,這里的status 是僅關鍵字參數,必須通過關鍵詞傳值print(f"ID: {id_num}")print(f"Name: {name}")print(f"Tags (*args): {tags}")print(f"Status: {status}")          # status 是一個有默認值的普通關鍵字參數print(f"Details (**kwargs): {details}")print("-" * 20)# 調用1:
process_data(101, "Alice", "vip", "new_user", location="USA", age=30)
# ID: 101
# Name: Alice
# Tags (*args): ('vip', 'new_user')  <-- "vip", "new_user" 是多余的位置參數,被 *tags 收集
# Status: pending                    <-- status 使用默認值,因為調用中沒有 status=...
# Details (**kwargs): {'location': 'USA', 'age': 30} <-- location 和 age 是多余的關鍵字參數,被 **details 收集
# --------------------# 調用2:
process_data(102, "Bob", status="active", department="Sales")
# ID: 102
# Name: Bob
# Tags (*args): ()                   <-- 沒有多余的位置參數
# Status: active                     <-- status 被關鍵字參數 'active' 覆蓋
# Details (**kwargs): {'department': 'Sales'} <-- department 是多余的關鍵字參數
# --------------------# 調用3:
process_data(103, "Charlie", "admin") # 'admin' 會被 *tags 捕獲
# ID: 103
# Name: Charlie
# Tags (*args): ('admin',)
# Status: pending
# Details (**kwargs): {}
# --------------------# 調用4: (演示關鍵字參數也可以用于定義中的位置參數)
process_data(name="David", id_num=104, profession="Engineer")
# ID: 104
# Name: David
# Tags (*args): ()
# Status: pending
# Details (**kwargs): {'profession': 'Engineer'}
# --------------------

題目1:計算圓的面積

  • 任務: 編寫一個名為 calculate_circle_area 的函數,該函數接收圓的半徑 radius 作為參數,并返回圓的面積。圓的面積 = π * radius2 (可以使用 math.pi 作為 π 的值)
  • 要求:函數接收一個位置參數 radius。計算半徑為5、0、-1時候的面積
  • 注意點:可以采取try-except 使函數變得更加穩健,如果傳入的半徑為負數,函數應該返回 0 (或者可以考慮引發一個ValueError,但為了簡單起見,先返回0)。
import mathdef calculate_circle_area(radius):try:if radius < 0:return 0return math.pi * (radius ** 2)except TypeError:return 0  # 處理非數字輸入的情況,也可以根據需要擴展# 測試用例
print("半徑為5的圓面積:", calculate_circle_area(5))   # 應返回 ~78.54
print("半徑為0的圓面積:", calculate_circle_area(0))   # 應返回 0
print("半徑為-1的圓面積:", calculate_circle_area(-1)) # 應返回 0

題目2:計算矩形的面積

  • 任務: 編寫一個名為 calculate_rectangle_area 的函數,該函數接收矩形的長度 length 和寬度 width 作為參數,并返回矩形的面積。
  • 公式: 矩形面積 = length * width
  • 要求:函數接收兩個位置參數 length 和 width。
    • 函數返回計算得到的面積。
    • 如果長度或寬度為負數,函數應該返回 0。
def calculate_rectangle_area(length, width):"""計算矩形的面積參數:length (float 或 int): 矩形的長度width (float 或 int): 矩形的寬度返回:float: 矩形的面積,如果 length 或 width 為負數,則返回 0"""if length < 0 or width < 0:return 0return length * widthprint(calculate_rectangle_area(5, 3))   # 輸出: 15
print(calculate_rectangle_area(-2, 4))  # 輸出: 0
print(calculate_rectangle_area(2, -5))  # 輸出: 0
print(calculate_rectangle_area(0, 5))   # 輸出: 0

題目3:計算任意數量數字的平均值

  • 任務: 編寫一個名為 calculate_average 的函數,該函數可以接收任意數量的數字作為參數(引入可變位置參數 (*args)),并返回它們的平均值。
  • 要求:使用 *args 來接收所有傳入的數字。
    • 如果沒有任何數字傳入,函數應該返回 0。
    • 函數返回計算得到的平均值。
def calculate_average(*args):"""計算任意數量數字的平均值參數:*args (float 或 int): 任意數量的數字返回:float: 所有數字的平均值,如果沒有提供任何數字,則返回 0"""if not args:return 0return sum(args) / len(args)print(calculate_average(1, 2, 3, 4, 5))       # 輸出: 3.0
print(calculate_average(10, 20))              # 輸出: 15.0
print(calculate_average())                    # 輸出: 0
print(calculate_average(3.5, 4.5, 2))         # 輸出: 3.3333333333333335

題目4:打印用戶信息

  • 任務: 編寫一個名為 print_user_info 的函數,該函數接收一個必需的參數 user_id,以及任意數量的額外用戶信息(作為關鍵字參數)。
  • 要求:
    • user_id 是一個必需的位置參數。
    • 使用 **kwargs 來接收額外的用戶信息。
    • 函數打印出用戶ID,然后逐行打印所有提供的額外信息(鍵和值)。
    • 函數不需要返回值
def print_user_info(user_id, **kwargs):"""打印用戶信息參數:user_id (int 或 str): 用戶的ID,必需的位置參數。**kwargs: 任意數量的額外用戶信息作為關鍵字參數。返回:無返回值。函數打印出用戶ID和所有提供的額外信息(鍵和值)。"""print(f"用戶ID: {user_id}")if kwargs:for key, value in kwargs.items():print(f"{key}: {value}")else:print("沒有提供額外的用戶信息。")print_user_info(123, name="張三", age=28, gender="男")
# 輸出:
# 用戶ID: 123
# name: 張三
# age: 28
# gender: 男print_user_info(456)
# 輸出:
# 用戶ID: 456
# 沒有提供額外的用戶信息。

題目5:格式化幾何圖形描述

  • 任務: 編寫一個名為 describe_shape 的函數,該函數接收圖形的名稱 shape_name (必需),一個可選的 color (默認 “black”),以及任意數量的描述該圖形尺寸的關鍵字參數 (例如 radius=5 對于圓,length=10, width=4 對于矩形)。
  • 要求:shape_name 是必需的位置參數。
    • color 是一個可選參數,默認值為 “black”
    • 使用 **kwargs 收集描述尺寸的參數。
    • 函數返回一個描述字符串,格式如下:
    • “A [color] [shape_name] with dimensions: [dim1_name]=[dim1_value], [dim2_name]=[dim2_value], …”如果 **kwargs 為空,則尺寸部分為 “with no specific dimensions.”
desc1 = describe_shape("circle", radius=5, color="red")
print(desc1)
# 輸出: A red circle with dimensions: radius=5desc2 = describe_shape("rectangle", length=10, width=4)
print(desc2)
# 輸出: A black rectangle with dimensions: length=10, width=4desc3 = describe_shape("triangle", base=6, height=8, color="blue")
print(desc3)
# 輸出: A blue triangle with dimensions: base=6, height=8desc4 = describe_shape("point", color="green")
print(desc4)
# 輸出: A green point with no specific dimensions.
def describe_shape(shape_name, color="black", **kwargs):"""返回一個格式化的字符串,描述一個幾何圖形。參數:shape_name (str): 圖形名稱,必需。color (str): 圖形顏色,默認為 "black"。**kwargs: 任意數量的關鍵字參數,用于描述圖形的尺寸。返回:str: 格式化的圖形描述字符串。"""if not kwargs:return f"A {color} {shape_name} with no specific dimensions."dims = ", ".join([f"{key}={value}" for key, value in kwargs.items()])return f"A {color} {shape_name} with dimensions: {dims}"desc1 = describe_shape("circle", radius=5, color="red")
print(desc1)
# 輸出: A red circle with dimensions: radius=5desc2 = describe_shape("rectangle", length=10, width=4)
print(desc2)
# 輸出: A black rectangle with dimensions: length=10, width=4desc3 = describe_shape("triangle", base=6, height=8, color="blue")
print(desc3)
# 輸出: A blue triangle with dimensions: base=6, height=8desc4 = describe_shape("point", color="green")
print(desc4)
# 輸出: A green point with no specific dimensions.

@浙大疏錦行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81221.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Docker部署Nacos

sudo systemctl start docker sudo systemctl enable docker docker --version 步驟 2: 拉取 Nacos Docker 鏡像 拉取 Nacos 鏡像&#xff1a; 你可以從 Docker Hub 上拉取官方的 Nacos 鏡像&#xff0c;使用以下命令&#xff1a; docker pull nacos/nacos-server 這會從 …

Ubuntu 添加系統調用

實驗內容 通過內核編譯法添加一個不用傳遞參數的系統調用&#xff0c;其功能可自定義。 &#xff08;1&#xff09;添加系統調用號&#xff0c;系統會根據這個號找到syscall_table中的相應表項。具體做法是在syscall_64.tbl文件中添加系統調用號和調用函數的對應關系。 &#…

Javascript:WebAPI

獲取網頁元素 queryselector queryselector是 JavaScript 中用于選擇 DOM 元素的重要方法&#xff0c;它允許使用 CSS 選擇器語法來查找頁面中的元素。 一般queryselector獲取的元素都是html中第一個選擇器的元素 支持選擇器類型&#xff1a;類選擇器(.class) &#xff0c…

十二、Hive 函數

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月1日 專欄&#xff1a;Hive教程 在數據處理的廣闊天地中&#xff0c;我們常常需要對數據進行轉換、計算、清洗或提取特定信息。Hive 提供了強大的內置運算符和豐富的內置函數庫&#xff0c;它們就像魔法師手中的魔法棒&…

Linux之Nginx安裝及配置原理篇(一)

Nginx安裝及配置 前情回顧 首先針對Nginx進程模型&#xff0c;我們回顧一下它的原理機制&#xff0c;我們知道它是通過Master通過fork分發任務節點給予work節點&#xff0c;然后work節點觸發了event事件&#xff0c;之后通過一個access_muttex互斥鎖&#xff0c;來單線程調用我…

嵌入式培訓之數據結構學習(五)棧與隊列

一、棧 &#xff08;一&#xff09;棧的基本概念 1、棧的定義&#xff1a; 注&#xff1a;線性表中的棧在堆區&#xff08;因為是malloc來的&#xff09;&#xff1b;系統中的棧區存儲局部變量、函數形參、函數返回值地址。 2、棧頂和棧底&#xff1a; 允許插入和刪除的一端…

深度學習---知識蒸餾(Knowledge Distillation, KD)

一、知識蒸餾的本質與起源 定義&#xff1a; 知識蒸餾是一種模型壓縮與遷移技術&#xff0c;通過將復雜高性能的教師模型&#xff08;Teacher Model&#xff09;所學的“知識”遷移到輕量級的學生模型&#xff08;Student Model&#xff09;&#xff0c;使學生模型在參數量和計…

ARP Detection MAC-Address Static

一、ARP Detection&#xff08;ARP檢測&#xff09; ? 定義&#xff1a; ARP檢測是一種防止ARP欺騙攻擊的安全機制。它通過監控或驗證網絡中的ARP報文&#xff0c;來判斷是否存在偽造的ARP信息。 &#x1f50d; 工作原理&#xff1a; 網絡設備&#xff08;如交換機&#xf…

基于 Python 的界面程序復現:標準干涉槽型設計計算及仿真

基于 Python 的界面程序復現&#xff1a;標準干涉槽型設計計算及仿真 在工業設計與制造領域&#xff0c;刀具的設計與優化是提高生產效率和產品質量的關鍵環節之一。本文將介紹如何使用 Python 復現一個用于標準干涉槽型設計計算及仿真的界面程序&#xff0c;旨在幫助工程師和…

Python繪制南丁格爾玫瑰圖:從入門到實戰

Python繪制南丁格爾玫瑰圖&#xff1a;從入門到實戰 引言 南丁格爾玫瑰圖&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;也被稱為極區圖&#xff08;Polar Area Chart&#xff09;&#xff0c;是一種獨特的數據可視化方式。這種圖表由弗洛倫斯南丁格爾&#xff…

計算機操作系統概要

不謀萬世者&#xff0c;不?謀?時。不謀全局者 &#xff0c;足謀?域 。 ——陳澹然《寤?》《遷都建藩議》 操作系統 一.對文件簡單操作的常用基礎指令 ls ls 選項 目錄或?件名:羅列當前?錄下的?件 -l&#xff1a;以長格式顯示?件和?錄的詳細信息 -a 或 --all&…

<PLC><視覺><機器人>基于海康威視視覺檢測和UR機械臂,如何實現N點標定?

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,相關設備如觸摸屏(HMI)、交換機等工控產品,如果有…

從專家編碼到神經網絡學習:DTM 的符號操作新范式

1st author: Paul Soulos paper: Differentiable Tree Operations Promote Compositional Generalization ICML 2023 code: psoulos/dtm: Differentiable Tree Machine 1. 問題與思路 現代深度學習在連續向量空間中取得了巨大成功&#xff0c;然而在處理具有顯式結構&#x…

微信小程序第三方代開發模式技術調研與實踐總結

?? 微信小程序第三方代開發模式技術調研與實踐總結 ?? 前言 隨著企業對私有化品牌運營訴求的增加,許多大型客戶希望將原本由 SaaS 平臺統一提供的小程序遷移至自有主體(AppID)下運行,同時又希望繼續沿用 SaaS 平臺的業務服務與數據托管方式。微信開放平臺提供的“小程…

開啟智能未來:DeepSeek賦能行業變革之路

前言 在人工智能重構生產關系的2025年&#xff0c;DeepSeek以其革命性的推理能力和Python生態的技術延展性&#xff0c;正在重塑內容創作與數據智能的邊界。本書以"工具迭代思維升維"為雙輪驅動&#xff0c;構建從認知突破到商業落地的完整知識圖譜。 DeepSeek的崛…

常見三維引擎坐標軸 webgl threejs cesium blender unity ue 左手坐標系、右手坐標系、坐標軸方向

平臺 / 引擎坐標系類型Up&#xff08;上&#xff09;方向Forward&#xff08;前進&#xff09;方向前進方向依據說明Unity左手坐標系YZtransform.forward 是 Z 軸正方向&#xff0c;默認攝像機朝 Z 看。Unreal Engine左手坐標系ZXUE 的角色面朝 X&#xff0c;默認使用 GetActor…

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise論文閱讀

冷擴散&#xff1a;無需噪聲的任意圖像變換反轉 摘要 標準擴散模型通常涉及兩個核心步驟&#xff1a;圖像降質 &#xff08;添加高斯噪聲&#xff09;和圖像恢復 &#xff08;去噪操作&#xff09;。本文發現&#xff0c;擴散模型的生成能力并不強烈依賴于噪聲的選擇&#xf…

Java并發編程核心組件簡單了解

一、Lock體系 1. ReentrantLock&#xff08;可重入鎖&#xff09; Lock lock new ReentrantLock(); lock.lock(); try {// 臨界區代碼 } finally {lock.unlock(); }特點&#xff1a;可重入、支持公平/非公平策略優勢&#xff1a;可中斷鎖獲取、定時鎖等待使用場景&#xff1…

第二個五年計劃!

下一階段&#xff01;5年后&#xff01;33歲&#xff01;體重維持在125斤內&#xff01;腰圍74&#xff01; 健康目標&#xff1a; 體檢指標正常&#xff0c;結節保持較小甚至變小&#xff01; 工作目標&#xff1a; 每年至少在一次考評里拿A&#xff08;最高S&#xff0c;A我理…

Redis(三) - 使用Java操作Redis詳解

文章目錄 前言一、創建項目二、導入依賴三、鍵操作四、字符串操作五、列表操作六、集合操作七、哈希表操作八、有序集合操作九、完整代碼1. 完整代碼2. 項目下載 前言 本文主要介紹如何使用 Java 操作 Redis 數據庫&#xff0c;涵蓋項目創建、依賴導入及 Redis 各數據類型&…