waldorf Тея дни се мъча с един питон. Откак се е пръкнал го заобикалям - мразя езици в които блоковете се определят от идентацията. Та питам колегите за едно рамо да дадат, че да не се мъча кат грешен дявол и те ми предложиха да съм пробвал с чатгпт. Амаха. Реших да пробвам с github copilot в vscode, че ме мръзи да обяснявам на чата в браузър и да копвам кода в vim. Инсталирах го, гледах едно филмче - то направо все едно си имаш експертна жунка да го гърчиш и той да работи. Пък и си е друго като ти следи курсора в сорса и е наясно с проекта. Та почнахме да кодим с него. Бива. Обаче това което ме впечатли най много беше един шибан питонски интаксис дето го гледах и не разбирах що за чудо е това. Питах копилота да ми го обясни. И той взе, че го обясни съвсем човешки та даже ми стана ясно. БАСИМАМАТА!
@workspace explain Write an explanation for the active selection as paragraphs of text.
self.modbus.write_registers( mbreg.REG_TUNNEL_RX + 1, *[(val1 << 8 | val2) for val1, val2 in itertools.zip_longest(values[::2], values[1::2], fillvalue=0)] )
The active selection is a line of Python code that writes a series of values to Modbus registers. This is done using the write_registers method of the modbus object. Let's break down the components of this line for a clearer understanding.
First, the method write_registers is called on the modbus object. This method is responsible for writing multiple registers starting from a specified address. The address used here is mbreg.REG_TUNNEL_RX + 1, which indicates that the writing starts from one register after REG_TUNNEL_RX.
The values to be written are generated by a list comprehension. This list comprehension iterates over pairs of values from the values list. The itertools.zip_longest function is used to pair elements from values::2 (every second element starting from the first) with elements from values1::2 (every second element starting from the second). If the values list has an odd number of elements, zip_longest fills the missing value with 0 (specified by fillvalue=0).
For each pair (val1, val2), the expression (val1 << 8 | val2) is evaluated. This expression shifts val1 8 bits to the left (equivalent to multiplying by 256) and then performs a bitwise OR with val2. This effectively combines val1 and val2 into a single 16-bit value, where val1 occupies the higher 8 bits and val2 occupies the lower 8 bits.
Finally, the list of these combined 16-bit values is unpacked (using the * operator) and passed as arguments to the write_registers method. This results in writing the generated 16-bit values to the Modbus registers starting from the specified address.
This piece of shi^H^H^Hcode doesn't need an explanation. It needs a flamethrower.
Явно Python напълно е заместил Perl, включително и като write-only language.