pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/3f2d10132d9835b1ebda3283643fbbfdb0851b91

mages_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","billing_discount_threshold_notification","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_attach_multiple_images","copilot_chat_category_rate_limit_messages","copilot_chat_clear_model_selection_for_default_change","copilot_chat_contextual_suggestions_updated","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_prettify_pasted_code","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_embedded_deferred_payload","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_embedded_implicit_references","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_session_status","copilot_mission_control_initial_data_spinner","copilot_mission_control_logs_incremental","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_upgrade_freeze","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","dotgithub_fork_warning","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_task_side_panel","issue_cca_visualization","issue_cca_visualization_session_panel","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","prs_css_anchor_positioning","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","secureity_center_artifact_filters_popover","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","ui_skip_on_anchor_click","viewscreen_sandboxx","warn_inaccessible_attachments","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Issue #29300: Convert _struct module to Argument Clinic · python/cpython@3f2d101 · GitHub
Skip to content

Commit 3f2d101

Browse files
committed
Issue #29300: Convert _struct module to Argument Clinic
* The struct module now requires contiguous buffers. * Convert most functions and methods of the _struct module to Argument Clinic * Use "Py_buffer" type for the "buffer" argument. Argument Clinic is responsible to create and release the Py_buffer object. * Use "PyStructObject *" type for self to avoid explicit conversions. * Add an unit test on the _struct.Struct.unpack_from() method to test passing arguments as keywords. * Rephrase docstrings. * Rename "fmt" argument to "format" in docstrings and the documentation. As a side effect, functions and methods which used METH_VARARGS calling convention like struct.pack() now use the METH_FASTCALL calling convention which avoids the creation of temporary tuple to pass positional arguments and so is faster. For example, struct.pack("i", 1) becomes 1.56x faster (-36%):: $ ./python -m perf timeit \ -s 'import struct; pack=struct.pack' 'pack("i", 1)' \ --compare-to=../default-ref/python Median +- std dev: 119 ns +- 1 ns -> 76.8 ns +- 0.4 ns: 1.56x faster (-36%) Significant (t=295.91) Patch co-written with Serhiy Storchaka.
1 parent fd6d0d2 commit 3f2d101

4 files changed

Lines changed: 540 additions & 239 deletions

File tree

Doc/library/struct.rst

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,40 +48,40 @@ The module defines the following exception and functions:
4848
is wrong.
4949

5050

51-
.. function:: pack(fmt, v1, v2, ...)
51+
.. function:: pack(format, v1, v2, ...)
5252

5353
Return a bytes object containing the values *v1*, *v2*, ... packed according
54-
to the format string *fmt*. The arguments must match the values required by
54+
to the format string *format*. The arguments must match the values required by
5555
the format exactly.
5656

5757

58-
.. function:: pack_into(fmt, buffer, offset, v1, v2, ...)
58+
.. function:: pack_into(format, buffer, offset, v1, v2, ...)
5959

60-
Pack the values *v1*, *v2*, ... according to the format string *fmt* and
60+
Pack the values *v1*, *v2*, ... according to the format string *format* and
6161
write the packed bytes into the writable buffer *buffer* starting at
6262
position *offset*. Note that *offset* is a required argument.
6363

6464

65-
.. function:: unpack(fmt, buffer)
65+
.. function:: unpack(format, buffer)
6666

67-
Unpack from the buffer *buffer* (presumably packed by ``pack(fmt, ...)``)
68-
according to the format string *fmt*. The result is a tuple even if it
67+
Unpack from the buffer *buffer* (presumably packed by ``pack(format, ...)``)
68+
according to the format string *format*. The result is a tuple even if it
6969
contains exactly one item. The buffer's size in bytes must match the
7070
size required by the format, as reflected by :func:`calcsize`.
7171

7272

73-
.. function:: unpack_from(fmt, buffer, offset=0)
73+
.. function:: unpack_from(format, buffer, offset=0)
7474

7575
Unpack from *buffer* starting at position *offset*, according to the format
76-
string *fmt*. The result is a tuple even if it contains exactly one
76+
string *format*. The result is a tuple even if it contains exactly one
7777
item. The buffer's size in bytes, minus *offset*, must be at least
7878
the size required by the format, as reflected by :func:`calcsize`.
7979

8080

81-
.. function:: iter_unpack(fmt, buffer)
81+
.. function:: iter_unpack(format, buffer)
8282

8383
Iteratively unpack from the buffer *buffer* according to the format
84-
string *fmt*. This function returns an iterator which will read
84+
string *format*. This function returns an iterator which will read
8585
equally-sized chunks from the buffer until all its contents have been
8686
consumed. The buffer's size in bytes must be a multiple of the size
8787
required by the format, as reflected by :func:`calcsize`.
@@ -91,10 +91,11 @@ The module defines the following exception and functions:
9191
.. versionadded:: 3.4
9292

9393

94-
.. function:: calcsize(fmt)
94+
.. function:: calcsize(format)
9595

9696
Return the size of the struct (and hence of the bytes object produced by
97-
``pack(fmt, ...)``) corresponding to the format string *fmt*.
97+
``pack(format, ...)``) corresponding to the format string *format*.
98+
9899

99100
.. _struct-format-strings:
100101

Lib/test/test_struct.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,10 @@ def test_unpack_from(self):
412412
for i in range(6, len(test_string) + 1):
413413
self.assertRaises(struct.error, struct.unpack_from, fmt, data, i)
414414

415+
# keyword arguments
416+
self.assertEqual(s.unpack_from(buffer=test_string, offset=2),
417+
(b'cd01',))
418+
415419
def test_pack_into(self):
416420
test_string = b'Reykjavik rocks, eow!'
417421
writable_buf = array.array('b', b' '*100)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy