در این مطلب، ویدئو C++ در پایتون به آسانی! #pybind11 با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:09:56
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,080 –> 00:00:02,399
این ویدیو توسط برنامه hbt حمایت می شود. بیشتر
2
00:00:02,399 –> 00:00:03,439
در مورد
3
00:00:03,439 –> 00:00:05,359
دموکراسی که بعداً بسیار
4
00:00:05,359 –> 00:00:07,359
مورد علاقه بود گزینه pybind 11 بیشتر
5
00:00:07,359 –> 00:00:09,040
مورد علاقه من بود، بنابراین بیایید در مورد کتابخانه مورد علاقه من برای
6
00:00:09,040 –> 00:00:10,719
نوشتن لفاف های پایتون برای کد C
7
00:00:10,719 –> 00:00:12,559
8
00:00:12,559 –> 00:00:14,719
صحبت کنیم.
9
00:00:14,719 –> 00:00:16,320
کتابخانه فقط هدر که
10
00:00:16,320 –> 00:00:18,560
عالی است بسیار شبیه به boost.python است که
11
00:00:18,560 –> 00:00:20,320
استفاده از آن بسیار آسان بود و منجر به
12
00:00:20,320 –> 00:00:22,560
boilerplate واقعاً ساده شد و می توانید اگر
13
00:00:22,560 –> 00:00:23,439
14
00:00:23,439 –> 00:00:25,760
باید کد پایتون را از c plus فراخوانی کنید من از این
15
00:00:25,760 –> 00:00:28,000
کتابخانه در درجه اول برای استفاده از کد c plus موجود استفاده
16
00:00:28,000 –> 00:00:30,000
می کنم. همچنین برای
17
00:00:30,000 –> 00:00:31,599
درایورها و به طور کلی برای سرعت بخشیدن به
18
00:00:31,599 –> 00:00:32,880
برخی از بیت های کد مفید است، هر چند
19
00:00:32,880 –> 00:00:34,719
من می بینم که در حال حاضر بیشتر به دنبال شماره هستم تا این کار را انجام دهم،
20
00:00:34,719 –> 00:00:36,160
21
00:00:36,160 –> 00:00:38,160
بنابراین بیایید ساده شروع کنیم و سپس لایه ای
22
00:00:38,160 –> 00:00:40,000
روی پیچیدگی داشته باشیم، می خواهیم یک
23
00:00:40,000 –> 00:00:40,960
c plus بسیار ساده بنویسیم.
24
00:00:40,960 –> 00:00:42,800
تابع و حداقل
25
00:00:42,800 –> 00:00:44,640
کار مورد نیاز برای فراخوانی آن از پایتون را انجام دهید،
26
00:00:44,640 –> 00:00:46,640
بنابراین در اینجا تابع به وضوح چنین
27
00:00:46,640 –> 00:00:48,239
عبارات پیچیده ای را نمی توان
28
00:00:48,239 –> 00:00:49,920
در پایتون بومی ارزیابی کرد
29
00:00:49,920 –> 00:00:52,160
و ما باید به c به علاوه که یک بود روی آوریم.
30
00:00:52,160 –> 00:00:54,079
شوخی اولین کاری که باید انجام دهیم این
31
00:00:54,079 –> 00:00:56,399
است که مخزن pi bind 11 را
32
00:00:56,399 –> 00:00:58,160
شبیه سازی کنیم، راه های ظریف دیگری برای استفاده از
33
00:00:58,160 –> 00:01:00,160
این کتابخانه وجود دارد که مورد علاقه من است که از آن
34
00:01:00,160 –> 00:01:01,840
از طریق بسته واقعی پایتون استفاده می کنم، اما
35
00:01:01,840 –> 00:01:03,039
این ساده ترین راه است که
36
00:01:03,039 –> 00:01:05,040
اکنون می توانیم فایل cmake خود را بنویسیم.
37
00:01:05,040 –> 00:01:06,560
بیشتر فقط boilerplate
38
00:01:06,560 –> 00:01:09,119
و سپس دایرکتوری pi را با 11 اضافه می کنیم
39
00:01:09,119 –> 00:01:10,640
و سپس این تابع cmake را
40
00:01:10,640 –> 00:01:12,080
که از دایرکتوری بارگیری می شود فراخوانی می
41
00:01:12,080 –> 00:01:14,240
کنیم تا ماژول پایتون را تعریف کنیم
42
00:01:14,240 –> 00:01:17,360
عالی است ما در نیمه راه هستیم اما کاملاً
43
00:01:17,360 –> 00:01:18,799
با یک دعا زندگی نمی کنیم فقط اجازه
44
00:01:18,799 –> 00:01:19,520
دهید به c plus خود برگردیم.
45
00:01:19,520 –> 00:01:22,159
فایل شامل pi bind 11 است و
46
00:01:22,159 –> 00:01:23,920
گاهی اوقات افراد
47
00:01:23,920 –> 00:01:25,920
برای آدرس دهی آسان فضای نام باند پی 11 را مجدداً تعریف می کنند و
48
00:01:25,920 –> 00:01:28,000
من هم
49
00:01:28,000 –> 00:01:30,000
اکنون این کار را برای تعریف ماژول انجام می دهم که می توانیم
50
00:01:30,000 –> 00:01:31,600
این ماکرو را صدا کنیم و نام
51
00:01:31,600 –> 00:01:33,360
ماژول و همچنین به آن بدهیم. نام یک دسته ماژول
52
00:01:33,360 –> 00:01:33,840
53
00:01:33,840 –> 00:01:35,840
هم به عنوان ورودی و هم در داخل ماکرو ما
54
00:01:35,840 –> 00:01:37,520
میتوانیم شروع به تعریف خود ماژول کنیم،
55
00:01:37,520 –> 00:01:39,119
اجازه دهید با تعریف یک
56
00:01:39,119 –> 00:01:40,799
رشته سند کوچک زیبا شروع کنیم و میتوانید با
57
00:01:40,799 –> 00:01:42,079
تنظیم
58
00:01:42,079 –> 00:01:43,680
module.dock هیچ چیز جالبی در اینجا انجام دهید.
59
00:01:43,680 –> 00:01:45,040
مثال رسمی راه بهتری برای انجام این کار
60
00:01:45,040 –> 00:01:46,479
از طریق یک ماکرو نشان می دهد، بنابراین توصیه می کنم
61
00:01:46,479 –> 00:01:48,079
آن را بررسی کنید تا
62
00:01:48,079 –> 00:01:50,320
تابعی را که ماژول می نامیم نمایش
63
00:01:50,320 –> 00:01:51,280
64
00:01:51,280 –> 00:01:52,560
65
00:01:52,560 –> 00:01:54,240
داده شود. و
66
00:01:54,240 –> 00:01:55,920
سپس یک ارجاع به تابع واقعی ارسال
67
00:01:55,920 –> 00:01:56,399
کنید
68
00:01:56,399 –> 00:01:58,399
و تمام شد، ما فقط باید
69
00:01:58,399 –> 00:02:00,479
اکنون کامپایل کنیم، بنابراین بیایید به پوشه
70
00:02:00,479 –> 00:02:01,200
با پروژه برویم
71
00:02:01,200 –> 00:02:02,799
و یک ساخت خارج از منبع را با یک
72
00:02:02,799 –> 00:02:04,719
پوشه جدید اجرا کنیم cmake
73
00:02:04,719 –> 00:02:08,080
run make ha missing نقطه ویرگول اجازه دهید آن را برطرف
74
00:02:08,080 –> 00:02:10,000
75
00:02:10,000 –> 00:02:12,400
کنیم و اگر به فایل های
76
00:02:12,400 –> 00:02:13,599
موجود در این دایرکتوری نگاه
77
00:02:13,599 –> 00:02:16,160
کنیم، اکنون این نقطه را می بینیم، بنابراین فایل در ویندوز یا
78
00:02:16,160 –> 00:02:17,840
مک این ممکن است پسوند دیگری باشد،
79
00:02:17,840 –> 00:02:19,599
اما یک فایل معادل وجود خواهد داشت و
80
00:02:19,599 –> 00:02:21,599
این فایل دارای ماژول است. نام و سپس یک
81
00:02:21,599 –> 00:02:23,680
دسته کلی مزخرف دیگر این
82
00:02:23,680 –> 00:02:25,760
فایل ماژول شما است،
83
00:02:25,760 –> 00:02:27,760
دقیقاً مانند یک فایل regular.pi عمل می کند،
84
00:02:27,760 –> 00:02:29,520
اجازه دهید یک جلسه ipython را راه اندازی کنیم و
85
00:02:29,520 –> 00:02:31,360
این ماژول را کاوش کنیم، ما می توانیم
86
00:02:31,360 –> 00:02:33,120
ماژول را فقط با استفاده از نام آن
87
00:02:33,120 –> 00:02:34,720
و با استفاده از دستور dire وارد کنیم. می تواند ببیند
88
00:02:34,720 –> 00:02:36,400
که دارای تعدادی نماد معمولی
89
00:02:36,400 –> 00:02:38,000
از جمله داک است که ما تعریف کرده بودیم
90
00:02:38,000 –> 00:02:39,120
و همچنین تابعی که اضافه کرده ایم
91
00:02:39,120 –> 00:02:40,080
و نام
92
00:02:40,080 –> 00:02:42,080
93
00:02:42,080 –> 00:02:43,840
94
00:02:43,840 –> 00:02:44,480
95
00:02:44,480 –> 00:02:46,080
آن را تغییر داده ایم. و همچنین
96
00:02:46,080 –> 00:02:47,760
انواع آنها و همچنین نوع بازگشتی و
97
00:02:47,760 –> 00:02:48,879
اگر این تابع را با انواع آرگومان نادرست فراخوانی کنیم
98
00:02:48,879 –> 00:02:50,720
99
00:02:50,720 –> 00:02:52,640
، تابع ناموفق می شود که گفته
100
00:02:52,640 –> 00:02:54,319
شد هنوز می توانیم ins را ارسال کنیم و wrapper
101
00:02:54,319 –> 00:02:55,519
تبدیل های لازم را انجام می دهد
102
00:02:55,519 –> 00:02:56,319
زیرا واضح هستند
103
00:02:56,319 –> 00:02:58,640
و یک float را به عنوان برمی گرداند. pi bind
104
00:02:58,640 –> 00:03:00,080
11 مورد انتظار این تبدیلها را برای
105
00:03:00,080 –> 00:03:02,000
اولیههای داخلی مانند ins و رشتهها انجام میدهد
106
00:03:02,000 –> 00:03:03,280
و همچنین این کار را برای
107
00:03:03,280 –> 00:03:05,200
ساختارهای داده پیچیدهتر مانند لیستها
108
00:03:05,200 –> 00:03:06,959
و دیکها و تاپلها انجام میدهیم همانطور که بعداً نشان خواهم داد
109
00:03:06,959 –> 00:03:08,640
قبل از شروع لایهبندی روی
110
00:03:08,640 –> 00:03:10,319
پیچیدگی، اجازه دهید یک یک فایل ساده برای
111
00:03:10,319 –> 00:03:12,000
انجام برخی تستها، ما برای راحتی کار،
112
00:03:12,000 –> 00:03:13,360
وارد کردن ستاره در اینجا انجام میدهیم
113
00:03:13,360 –> 00:03:14,720
و فعلاً اجازه دهید یک
114
00:03:14,720 –> 00:03:16,800
فراخوانی تابع ساده راهاندازی کنیم و نتایج را چاپ کنیم
115
00:03:16,800 –> 00:03:18,400
و سپس یک دستور پوسته بسیار ساده
116
00:03:18,400 –> 00:03:19,840
را تنظیم کنیم که wi این تست را بسازم و سپس اجرا
117
00:03:19,840 –> 00:03:20,480
118
00:03:20,480 –> 00:03:22,319
کنم، متوجه میشوم که در توسعههایی مانند این،
119
00:03:22,319 –> 00:03:23,680
داشتن حداقل چند آزمایش دستی اولیه
120
00:03:23,680 –> 00:03:25,760
میتواند بسیار مفید باشد،
121
00:03:25,760 –> 00:03:27,760
بیایید یک کلاس فوقالعاده ساده تعریف کنیم
122
00:03:27,760 –> 00:03:29,360
که توابع طراحی شده برای ضرب اعداد را در معرض دید قرار میدهد
123
00:03:29,360 –> 00:03:31,519
و دارای یک ضریب
124
00:03:31,519 –> 00:03:32,640
به عنوان حالت داخلی آن است.
125
00:03:32,640 –> 00:03:34,400
این کلاس را در معرض نمایش قرار دهید تنها کاری که باید انجام دهیم این
126
00:03:34,400 –> 00:03:36,000
است که این تابع کلاس کدون کولون pi را
127
00:03:36,000 –> 00:03:37,599
با نام کلاس فراخوانی
128
00:03:37,599 –> 00:03:39,519
کنیم، سپس از دسته ماژول عبور می دهیم
129
00:03:39,519 –> 00:03:41,200
و
130
00:03:41,200 –> 00:03:41,680
131
00:03:41,680 –> 00:03:43,519
اگر اکنون این را کامپایل کنیم و تابع dire را در ماژول فراخوانی کنیم، یک نام به رابط پایتون نیز می دهیم.
132
00:03:43,519 –> 00:03:45,040
می بینیم که
133
00:03:45,040 –> 00:03:46,720
نام کلاس ظاهر می شود و می توانیم
134
00:03:46,720 –> 00:03:47,280
آن را چاپ کنیم اما آن
135
00:03:47,280 –> 00:03:49,760
را مقداردهی اولیه نکنیم اوه، سازنده را فراموش کرده ایم،
136
00:03:49,760 –> 00:03:50,879
137
00:03:50,879 –> 00:03:52,560
بیایید این کار را انجام دهیم، بیایید یک سازنده اضافه کنیم و
138
00:03:52,560 –> 00:03:55,680
سپس به عقب برگردیم و دوباره تست را اجرا کنیم و
139
00:03:55,680 –> 00:03:57,840
لعنت بر این است که هنوز هم ناموفق است، زیرا
140
00:03:57,840 –> 00:03:59,760
ما هرگز خود سازنده را
141
00:03:59,760 –> 00:04:01,519
در pi bind 11 در معرض دید قرار دادیم، ما باید
142
00:04:01,519 –> 00:04:03,280
در مورد اینکه کدام توابع و
143
00:04:03,280 –> 00:04:05,120
فیلدها را در معرض نمایش قرار دهیم بسیار صریح باشیم و من شخصاً
144
00:04:05,120 –> 00:04:06,400
این سطح کنترل و مسئولیت اضافی را دوست
145
00:04:06,400 –> 00:04:08,159
دارم زیرا فکر می کنم منجر می شود برای
146
00:04:08,159 –> 00:04:10,000
پاک کننده apis لطفاً اگر
147
00:04:10,000 –> 00:04:11,439
غیر از این فکر می کنید نظر بدهید و بیایید
148
00:04:11,439 –> 00:04:12,000
بحث کنیم
149
00:04:12,000 –> 00:04:13,760
افشای سازنده بسیار آسان است،
150
00:04:13,760 –> 00:04:15,680
ما فقط می توانیم def را در کلاس کلون pi کولون فراخوانی کنیم
151
00:04:15,680 –> 00:04:17,199
و
152
00:04:17,199 –> 00:04:19,440
در این نماد ویژه پی
153
00:04:19,440 –> 00:04:21,440
کولون کولون را ارسال کنیم و این آرگومان سازنده را تعریف می کند
154
00:04:21,440 –> 00:04:22,880
برای
155
00:04:22,880 –> 00:04:24,400
سازنده بهعنوان آرگومانهای الگو به این
156
00:04:24,400 –> 00:04:24,880
تابع داده میشود،
157
00:04:24,880 –> 00:04:26,720
اکنون تست را اجرا میکنیم و پس از
158
00:04:26,720 –> 00:04:28,479
اصلاحات بالاخره میتوانیم
159
00:04:28,479 –> 00:04:28,960
کلاس
160
00:04:28,960 –> 00:04:31,360
را بسازیم، یک کلاس c داریم که مستقیماً از پایتون قابل دسترسی است،
161
00:04:31,360 –> 00:04:32,080
162
00:04:32,080 –> 00:04:34,320
تقریباً بدون کار اضافی، چقدر هیجانانگیز
163
00:04:34,320 –> 00:04:35,199
است که
164
00:04:35,199 –> 00:04:37,199
اکنون نمیتوانیم آن را فراخوانی کنیم. روش ضرب
165
00:04:37,199 –> 00:04:38,320
این کلاس فقط هنوز
166
00:04:38,320 –> 00:04:40,240
پس بیایید آن را مانند قبل در معرض نمایش قرار دهیم، با این
167
00:04:40,240 –> 00:04:42,000
تفاوت که اکنون باید از نام کلاس به
168
00:04:42,000 –> 00:04:43,280
عنوان فضای نام استفاده کنیم،
169
00:04:43,280 –> 00:04:44,800
بنابراین حالا که یک کلاس پایه و
170
00:04:44,800 –> 00:04:46,639
تابع اصلی در معرض دید داریم، اجازه دهید کمی
171
00:04:46,639 –> 00:04:48,400
در مورد انواع داده و نوع داده خودکار صحبت کنیم.
172
00:04:48,400 –> 00:04:50,160
در اینجا ما تابعی داریم که
173
00:04:50,160 –> 00:04:52,160
یک بردار را به عنوان ورودی می پذیرد و
174
00:04:52,160 –> 00:04:53,440
یک لیست جدید را به عنوان خروجی برمی گرداند و
175
00:04:53,440 –> 00:04:55,120
فقط هر مقدار لیست
176
00:04:55,120 –> 00:04:57,199
را در کلاس های mu ضرب می کند. ltiplier pi bind 11 به
177
00:04:57,199 –> 00:04:58,800
شما امکان می دهد تقریباً بدون کار اضافی این تابع را در معرض نمایش قرار دهید و آن را فراخوانی کنید،
178
00:04:58,800 –> 00:05:00