Fact-checked by Grok 2 weeks ago

Double colon

The double colon (::) is a typographical symbol and operator used across multiple disciplines, including , , and networking, to indicate relationships such as proportions, resolution, or address compression. In , the double colon specifically denotes a proportion, expressing the of two ratios; for example, a : b :: c : d means a/b = c/d, providing a concise notation for comparative quantities in and . This usage facilitates the statement of proportional relationships without explicitly writing an between fractions, a convention found in educational and analytical contexts. In , the double colon functions primarily as the scope resolution operator in languages like C++, where it qualifies identifiers to resolve ambiguities between global, namespace, or scopes—such as std::cout to the output stream from the . Introduced to manage name clashes in object-oriented and modular code, it also appears in 8 and later as the method reference operator, enabling concise lambda-like expressions, e.g., String::toUpperCase, to refer to existing methods without repeating their implementation. Similar roles exist in other languages, such as for slicing sequences (e.g., my_list[::2] to select every second element) or for type casting (e.g., '123'::integer). In networking, particularly , the double colon abbreviates contiguous sequences of zero-valued 16-bit groups (hextets) in addresses to improve readability; for instance, 2001:db8:0:0:0:0:0:1 can be shortened to 2001:db8::1, but it may only appear once per address to avoid ambiguity. This compression rule, defined in the IPv6 addressing standard, supports the 128-bit format while reducing verbosity in documentation and configuration.

Symbolic and rhetorical uses

Analogy and proportion notation

The double colon notation serves a key role in rhetorical and logical writing by denoting proportional relationships in , allowing for concise expression of comparisons between concepts. The standard structure, A : B :: C : D, signifies that the between A and B mirrors the between C and D, where the single colons indicate "is to" and the double colon indicates "as." This format facilitates clear, structural building without expansive prose, emphasizing correspondences in attributes, functions, or categories. Historically, the double colon emerged in the through Oughtred's Clavis Mathematicæ (1631), where it denoted proportions and was later extended to verbal analogies in 19th-century logic puzzles to model relational thinking. By the late 19th and early 20th centuries, this notation gained prominence in educational materials and intelligence assessments, such as verbal analogy tasks in IQ tests like the Stanford-Binet scale, which used it to evaluate reasoning and from 1916 onward. In and rhetorical texts, it appears in explanatory comparisons, such as illustrating thematic parallels—e.g., " : quest :: : scheme"—to highlight narrative structures or character dynamics efficiently. A representative example is "dog : puppy :: cat : kitten," where the first pair establishes a parent-offspring mirrored in the second, common in logic puzzles to train deductive skills. Such analogies appear in 19th-century puzzle books and modern educational exercises to promote conceptual mapping, as seen in former SAT verbal sections (pre-2005), where they tested proportional reasoning through word pairs. The notation evolved from the single colon's use in simple ratios (e.g., 2:4) to the double colon for analogies, distinguishing verbal or logical proportions from numerical ones and preventing in mixed contexts. This adaptation underscores its utility in non-mathematical domains, briefly paralleling formal proportions while prioritizing rhetorical clarity.

Punctuation for separation or emphasis

In informal writing, proofreading marks, and online forums, the double colon frequently denotes an , , or stage direction, particularly in protocols and scenarios. Examples include phrases like "::nods in agreement::" to indicate a non-verbal , distinguishing it from spoken or text. This convention emerged in early communities and persists in digital communication for its visual clarity in separating performative elements from regular prose. Debates on its propriety highlight concerns over stylistic excess, with major guides advising restraint. , for example, recommends avoiding double colons in titles or subtitles due to , suggesting a colon followed by a instead (e.g., "Title: Subtitle; Further Detail") to maintain without overemphasizing separations. Such recommendations underscore the double colon's limited role compared to the versatile single colon.

Mathematical uses

Proportions and ratios

In mathematics, the double colon (::) denotes a proportion between two ratios, expressing that they are equal. For direct proportions, the notation a : b :: c : d indicates that the ratio of a to b equals the ratio of c to d, formally written as \frac{a}{b} = \frac{c}{d}. This equivalence implies the cross-multiplication rule, where a \cdot d = b \cdot c. For inverse proportions, the notation adjusts to a : b :: d : c, meaning \frac{a}{b} = \frac{d}{c}, which yields a \cdot c = b \cdot d. The historical roots of this notation trace back to Euclid's Elements (circa 300 BCE), where ratios and proportions were described verbally or geometrically, such as "as A is to B, so is C to D," without symbolic colons. Symbolic development began in the with Al-Qalasadi's use of a single colon (:) to separate terms in proportions. By 1631, introduced the single colon for simple ratios (e.g., a : b) and the double colon for compound proportions (e.g., a : b :: c : d) in his Clavis Mathematicae, enhancing clarity over earlier verbal or dotted notations. This evolved further with refinements by in 1655 and use by in his earlier works, solidifying its use in European mathematics until the when the equals sign (=) largely supplanted it. The cross-multiplication rule derives algebraically from the double colon notation. Starting with a : b :: c : d, or \frac{a}{b} = \frac{c}{d}, multiply both sides by b \cdot d to eliminate denominators: a \cdot d = b \cdot c. This step preserves equality and isolates the products, providing a direct method to verify or solve proportions without fractions. In practical applications, the notation aids solving proportion problems. For scaling a recipe, if 2 cups of flour serve 4 people ($2 : 4), determine the amount for 6 people using $2 : 4 :: x : 6; cross-multiplying gives $2 \cdot 6 = 4 \cdot x, so x = 3 cups. Similarly, for map distances, if 1 inch represents 50 miles ($1 : 50), a 3-inch route corresponds to $1 : 50 :: 3 : y; thus, $1 \cdot y = 50 \cdot 3, yielding y = 150 miles.

Tensor contraction

In tensor notation, the single colon (:) denotes a contraction over two indices, reducing the of the resulting tensor by two, while the double colon (::) denotes a contraction over four indices, often applied to fourth-order tensors to produce a scalar or lower- tensor. This notation facilitates compact representation of multi-index summations in , particularly for operations involving higher-rank objects in physics and . In and physics, the double colon appears in formulations involving fourth-order tensors, such as those describing anisotropic material responses or effects under cyclic loading. For instance, in models of deformation, the quadruple contraction A :: B quantifies between fourth-order tensors A and tensors B, influencing accumulation rates. Although second-order tensors like the tensor \sigma and tensor \varepsilon typically use the single colon for their double contraction \sigma : \varepsilon to form scalar invariants representing mechanical work, extensions to higher-order descriptions in advanced models employ the double colon for contractions between fourth-order tensors in multi-scale analyses. The double colon derives from the Einstein summation convention, which implies summation over repeated indices without explicit sigma symbols. For two fourth-order tensors A_{ijkl} and B_{ijkl}, the is expressed as A :: B = A_{ijkl} B_{ijkl} = \sum_{i=1}^3 \sum_{j=1}^3 \sum_{k=1}^3 \sum_{l=1}^3 A_{ijkl} B_{ijkl}, yielding a scalar invariant under the convention. This follows directly from pairing corresponding indices across the tensors, analogous to the operation for matrices but extended to four dimensions. Applications in elasticity theory leverage the double colon to simplify products of the fourth-order \mathbb{C}_{ijkl} with measures, enabling efficient computation of invariants or densities in anisotropic media. In , while predominates, analogous full contractions over multiple indices—conceptually akin to the double colon—simplify the formation of scalars from the Riemann tensor R^\rho_{\sigma\mu\nu}, such as the Ricci scalar R = g^{\mu\nu} R^\rho_{\mu\rho\nu}, reducing multi-dimensional tensor products to Lorentz invariants essential for field equations.

Programming language uses

Scope resolution operator

The , denoted by ::, is a binary in C++ used to qualify identifiers and resolve ambiguities arising from name collisions across different , such as namespaces, classes, or the global . It enables explicit to entities like variables, functions, types, and members that might otherwise be hidden or shadowed by local declarations, which is particularly essential in large-scale where multiple libraries or modules may define overlapping names. For instance, to output text using the , one writes std::cout << "Hello"; rather than the unqualified cout, ensuring the correct identifier from the std namespace is referenced. Introduced in the original C++ implementation with Cfront 1.0 in 1985, the operator initially supported access to class members and global entities, allowing definitions like void MyClass::myFunction() { ... } to specify that the function belongs to MyClass even when implemented outside the class declaration. This predated formal standardization, but the ISO/IEC 14882:1998 (C++98) standard codified its use, incorporating s, which were proposed in the early 1990s and accepted by the ISO C++ standards committee in 1993—to further mitigate name conflicts in collaborative projects. In C++98, namespaces like namespace std { ... } partitioned the global scope, with :: providing resolution such as std::vector<int> vec;, preventing clashes in expansive codebases involving third-party code. Subsequent standards, including (ISO/IEC 14882:2011), enhanced this with features like inline namespaces (e.g., inline namespace v1 { ... }) and nested namespace definitions (e.g., namespace A::B { ... }), allowing more flexible scoping hierarchies while relying on :: for precise navigation, such as A::B::C::item. The syntax rules for :: require a qualified name in the form scope::identifier, where scope can be a namespace, class, or the global (unqualified ::identifier), and chaining is supported for nested scopes (e.g., Outer::Inner::member). It is mandatory for defining class or namespace members outside their declaration (e.g., int MyClass::count = 0;) and for accessing static members without an object instance (e.g., MyClass::staticMethod();). Common errors include omitting :: in shadowed contexts, leading to compilation failures like unresolved external symbols, or incorrect chaining in deeply nested scopes, which can cause ambiguity errors if multiple scopes define the same name—resolved by fully qualifying the path. In practice, over-reliance on global using namespace directives can exacerbate collisions, making explicit :: usage a recommended best practice for maintainability. In Java, introduced in version 8 (released March 2014), the double colon (::) serves as the method reference operator, allowing concise references to existing methods in functional interfaces, similar to lambda expressions but without repeating the method body. For example, String::toUpperCase can be used in contexts like list.stream().map(String::toUpperCase) to uppercase each string in a list, resolving to the static or instance method in its class scope. This operator supports various forms, including static methods (Class::staticMethod), instance methods on a specific object (object::instanceMethod), instance methods on a class (Class::instanceMethod), and constructors (Class::new), enhancing readability in functional programming paradigms. Similar scoping mechanisms exist in other languages, such as , where :: accesses nested functions and class members akin to C++, and Ada, which uses a dotted notation (e.g., Package.Item) for package-qualified resolution, though C++ provides the most extensive integration with its and template systems.

Sequence slicing and stepping

In , the double colon (::) appears in the extended slicing syntax for sequences like lists, tuples, and strings, specifically to denote the optional step parameter that enables extracting every nth element from a . The full syntax is sequence[start:stop:step], where start defaults to 0 (the beginning), stop defaults to the sequence's length (exclusive endpoint), and step defaults to 1 (forward increment). For instance, applying this to the string "hello"[::2] yields "hlo", as it selects elements at indices 0, 2, and 4. This notation allows concise data extraction without explicit loops, supporting both positive and negative values for all parameters. A negative step reverses the traversal direction, which is particularly useful for operations like string or list reversal. For example, "hello"[::-1] returns "olleh", starting from the last index and moving backward with a step of -1 until the beginning. The full syntax accommodates negative indices for start and stop (counting from the end, where -1 is the last element), and the slice produces an empty result if start exceeds stop for positive steps or vice versa for negative steps—for instance, lst[5:2] on a list lst of length 10 returns []. Edge cases include the full copy sequence[::], which duplicates the entire sequence shallowly; omitting start and stop but specifying step, like [::2] for even indices; or invalid steps like [::0], which raises a ValueError since zero step is undefined. These behaviors ensure predictable handling of bounds, with Python adjusting out-of-range indices to the sequence edges (e.g., start > len(sequence) clamps to the end). Extended slicing with the step parameter was introduced in 2.3, released in July 2003, extending the basic [start:stop] syntax available since 's early versions. This enhancement for built-in types like lists and strings drew inspiration from Perl's and extraction via substr, adapting those concepts for more flexible sequence manipulation in . While Python's slicing provides native support for stepping, other scripting languages handle similar subsequence extraction differently. Ruby uses range-based slicing like array[start..end] or array[start, length] but lacks a built-in step in its slice method, instead relying on iterators like each_slice for stepped access. 's Array.prototype.slice(start, end) similarly omits stepping, requiring custom loops or methods like filter with index checks to achieve equivalent results. Unlike the scope resolution operator (:: in C++ or similar), Python's double colon here focuses solely on data indexing rather than access. Python examples highlight the syntax's power for various scenarios. Consider a list numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; numbers[2:9:3] extracts [2, 5, 8], starting at index 2, stopping before 9, and stepping by 3. For reverse stepping with partial bounds, numbers[-3:: -2] (from the third-to-last element backward by 2) yields [7, 5, 3, 1] if the list is reversed in direction but clipped at the start. Empty slices arise in cases like numbers[8:5:2], returning [] due to invalid forward bounds. These operations work analogously on strings, such as "programming"[1:8:2] producing "rgam" from "programming". Performance-wise, slicing generates a new as a shallow copy of the selected elements, with O(k)—where k is the output size—making it efficient regardless of the original sequence's length, as only the relevant elements are copied. For large lists, such as a million-element , a full slice like large_list[:] incurs O(n) time and memory costs equivalent to duplication, potentially straining resources on memory-constrained systems; however, sparse slices (e.g., large_list[::1000]) are lightweight, copying only about n/1000 elements and completing in milliseconds even for n=10^6, outperforming equivalent manual loops that iterate the full length. This efficiency stems from optimized C implementations in , though repeated large slices in tight loops can accumulate overhead from allocations.

Type annotations and casting

In Haskell, the double colon (::) operator is used to declare type signatures for functions and values, explicitly specifying their types to aid in documentation and error detection. For instance, a simple function like factorial :: Int -> Int indicates that the factorial function takes an integer input and returns an integer output. Haskell supports polymorphic types through these signatures, such as inc :: Num a => a -> a, where Num a => constrains a to numeric types, allowing the function to work with any number type like Int or Float while enabling type inference for unconstrained cases. The language's type system relies heavily on inference, meaning signatures are optional for most expressions, but they clarify intent and improve compiler feedback during development. Haskell's use of :: for type annotations originated with the language's first specification in 1990, as part of its design to emphasize strong, static typing in a purely functional paradigm. Type mismatches in Haskell typically manifest as compile-time errors, where the compiler reports discrepancies between expected and actual types, such as attempting to apply a numeric function to a string, preventing runtime failures. For example, if a function expecting Int -> Int receives a String, GHC will flag the error with detailed messages tracing the mismatch. Best practices recommend including explicit type signatures for all top-level definitions to enhance code readability, facilitate debugging by localizing errors, and serve as self-documenting specifications, even when inference suffices. In , the double colon (::) serves as an explicit cast to convert values between data types, such as '2023-01-01'::[date](/page/Date) to parse a string into a date value. This syntax allows precise control over s in queries, contrasting with implicit casting, which PostgreSQL performs automatically in compatible contexts like arithmetic operations but can lead to unexpected behaviors if not anticipated. For example, implicit casts occur when comparing integers and text in certain operators, but using :: ensures explicit intent, reducing in complex queries. The :: operator was introduced in PostgreSQL version 7.1, released in 2001, as part of enhancements to type conversion mechanisms. PostgreSQL handles casting errors at runtime, raising exceptions for invalid conversions, such as attempting 'invalid'::[integer](/page/Integer), which results in an error like "invalid input syntax for type ." To mitigate this, developers can use functions like NULLIF or conditional checks before to handle potential mismatches gracefully. Best practices advocate explicit casts with :: over relying on implicit conversions for clarity and portability, especially in dynamic queries, and validating input data to prevent errors that could disrupt query execution.

Networking and web uses

IPv6 address compression

In the context of , which was standardized in 1998 to address the limitations of IPv4 by expanding to 128 bits, the verbosity of full notation posed usability challenges for network administrators and software developers. The double colon (::) was introduced as a mechanism to abbreviate sequences of zero hextets, making addresses more compact and human-readable without altering their numerical value. This notation originated in the initial specification and was later refined to ensure consistency across implementations. The precise rules for IPv6 address compression are outlined in RFC 5952, published in 2010, which recommends using :: to replace one or more groups of consecutive zero hextets, but only once per address to avoid ambiguity. For instance, the full address 2001:db8:0:0:0:0:0:1 can be compressed to 2001:db8::1, where :: substitutes the five trailing zero groups. When compressing, the longest sequence of zeros must be selected; if multiple sequences of equal length exist, the one closest to the left is chosen. Leading zeros in a hextet can also be omitted, such as writing 2001:0db8::0001 as 2001:db8::1. :: can be used to compress any sequence of consecutive zero hextets, including leading or trailing ones (e.g., ::1 or 2001:db8::), but only once per address to avoid ambiguity. It represents the all-zero address as ::. Common pitfalls include attempting multiple :: usages in a single address, which is invalid and can lead to errors, or non-consecutive zeros, as in incorrectly shortening 2001:db8:0:1:0:0:0:1 to 2001:db8::1:0:0:0:1—the correct form is 2001:db8:0:1::1. Validation typically involves expanding the address back to 128 bits for equivalence checks, ensuring no information loss. In practice, tools like the utility and DNS resolvers support this compression natively; for example, 2001:db8::1 resolves to the full expanded address during transmission. Network programming libraries, such as those in Python's ipaddress module or Java's Inet6Address class, incorporate parsers that handle :: expansion automatically, converting compressed strings to binary representations for operations. This standardization extends briefly to URI syntax in web contexts, where compressed IPv6 literals are enclosed in brackets for unambiguous .

CSS pseudo-elements

In CSS, pseudo-elements are abstract elements that represent portions of the document structure, allowing developers to style specific parts of elements without modifying the markup. The double colon notation (::) is the standard syntax for denoting these pseudo-elements, as defined in the W3C Selectors Level 4 specification, which requires two colons followed by the pseudo-element name to clearly distinguish them from pseudo-classes that use a single colon (:). The ::before and ::after pseudo-elements, formalized in the W3C CSS Pseudo-Elements Module Level 4, enable the insertion of generated content before or after the content of a selected element. For instance, to add a prefix to paragraphs, the following rule can be applied:
css
p::before {
  content: "Note: ";
  font-weight: bold;
}
This inserts "Note: " before each paragraph's text, enhancing readability without altering the DOM. Similarly, ::after can append suffixes, such as closing quotes in quotations. These pseudo-elements require the content property to specify what is inserted, which can include text, images via url(), or even counters for numbering. The adoption of the double colon syntax originated in CSS3 to provide a namespace separation between pseudo-elements (which create virtual elements) and pseudo-classes (which match element states), addressing ambiguities in earlier single-colon usage from CSS2.1. This distinction improves code clarity and maintainability, as single-colon notation for pseudo-elements remains supported only for in older specifications. Pseudo-elements like ::before and ::after are widely used in responsive design to create adaptive visual elements, such as mobile-friendly icons or dividers that scale with viewport changes via media queries. In animations, they facilitate effects like loading spinners or hover transitions; for example, a rotating arrow can be animated using:
css
.arrow::after {
  content: "→";
  display: inline-block;
  transition: transform 0.3s ease;
}

.arrow:hover::after {
  transform: rotate(90deg);
}
The announcement of textual content generated by these pseudo-elements by screen readers varies depending on the and ; in many cases, it is included in the accessible name, but support is not universal. For essential content, is preferred over generated content. Browser support for ::before and ::after with double colons is robust across modern , with full compatibility from onward; IE8 supports the single-colon variant for these specific pseudo-elements, enabling broad adoption since around 2010. Advanced pseudo-elements, such as ::selection, allow customization of text highlighting during user selection, overriding default browser colors for better visual feedback:
css
::selection {
  background-color: #4a90e2;
  color: white;
}
This enhances in interactive applications, with support in all major browsers except older versions of .

References

  1. [1]
    Proportion in Math | Definition, Types & Examples - Lesson
    A proportion is when two fractions or ratios are equal to each other. It can also be shown using a double colon (::).
  2. [2]
    Scope resolution operator: `::` | Microsoft Learn
    Mar 1, 2024 · The scope resolution operator :: is used to identify and disambiguate identifiers used in different scopes.
  3. [3]
    IPv6 address formats - IBM
    Double colon: Specify IPv6 addresses by using double colons ( :: ) in place of a series of zeros. For example, IPv6 address ff06:0:0:0:0:0:0:c3 can be ...
  4. [4]
    Ratio and Proportion - BYJU'S
    Dec 10, 2020 · In proportion, if two sets of given numbers are increasing or ... It is expressed using the double colon (::) or equal to the symbol (=).
  5. [5]
    Concept of Proportion | Definitions | Solved Examples
    In order to represent a proportion; either put the sign of equality (=) between the two ratios or put a double colon (::). Thus, 3, 4, 9 and 12 are in ...
  6. [6]
    Method References (The Java™ Tutorials > Learning the Java ...
    Method references enable you to do this; they are compact, easy-to-read lambda expressions for methods that already have a name.
  7. [7]
    What Does :: Mean in Python? Operator Meaning for Double Colon
    Mar 30, 2023 · The double colons ( :: ) in Python are used to specify how a slice operation should work. They can be used to slice through some data collections.
  8. [8]
    What Does a Double Colon Operator in PostgreSQL Do?
    Oct 20, 2022 · The double colon operator :: in PostgreSQL is a synonym for CAST, which converts a value into a different data type.
  9. [9]
    IPv6 Addressing Overview (System Administration Guide: IP Services)
    The IPv6 addressing architecture allows you use the two-colon (::) notation to represent contiguous 16-bit fields of zeros. For example, you might abbreviate ...
  10. [10]
    Analogies
    An analogy is often represented as follows: A : B :: C : D. For example, the ... Also, the conven- tion of single and double colons can be difficult for some ...
  11. [11]
    Analogy | Definition, Types & Examples - Lesson - Study.com
    The single colons mean 'is to,' and the double colon means 'as. ' The analogy has two pairs of words that are connected. Your job is to discover the ...
  12. [12]
    [PDF] 11. Precalculus mathematics in the seventeenth century
    used double colon symbol (::) for proportions or verbal analogies. Both appear in his work Clavis Mathematicæ, composed about 1628 and published in 1631. In ...
  13. [13]
    Stanford-Binet Intelligence Scales (SB5): Complete Guide - Cogn-IQ
    Sep 11, 2025 · The Stanford-Binet Intelligence Scales represent one of the most historically significant and widely used intelligence tests in psychology.
  14. [14]
    SAT Analogies and Comparisons: Why They Were Removed + What ...
    The SAT had analogy and quantitative comparison questions, but they were removed. Why, and what replaced them? Find out the flaws of SAT analogies here.Missing: colon | Show results with:colon
  15. [15]
    What is the double colon “:: ….. ::” supposed to mean?
    Feb 18, 2005 · It's just used to indicate an action instead of a comment. There is no specific rule, and other characters can be used, depending on the preference of the user.Missing: symbol | Show results with:symbol
  16. [16]
    A question regarding colon usage twice in a title
    Mar 21, 2017 · Chicago style suggests a colon after the first and a semicolon after the second subtitle. Double colons can be ambiguous, and are not common in ...
  17. [17]
    Colon (punctuation) - TCS Wiki
    Aug 24, 2017 · The colon's first appearance in English text is marked by the Shorter Oxford English Dictionary as 1589. Diacritical usage. The IPA length mark ...Missing: analogy | Show results with:analogy
  18. [18]
    [PDF] Long term deformations in soils due to cyclic loading
    In general case it is a fourth-order tensor A² discussed in Section 3 ... Analogously we may define double colon :: to quadruple contraction with four ...<|control11|><|separator|>
  19. [19]
    [PDF] CONTINUUM MECHANICS
    Feb 1, 2017 · upon double contraction symmetric fourth order unit tensor. IIsym extracts symmetric part of second order tensor. IIsym. 1. 2. II IIt. IIsym. 1.
  20. [20]
    Einstein Summation -- from Wolfram MathWorld
    Einstein summation is a notational convention for simplifying expressions including summations of vectors, matrices, and general tensors.Missing: double colon<|control11|><|separator|>
  21. [21]
    Fourth-Order Elastic-Moduli Tensors by Inspection - GeoScienceWorld
    Jan 1, 2001 · In addition, we show that we can generate elastic-moduli tensors which are orthogonal under the double-dot product; these sets of tensors ...
  22. [22]
    [PDF] Introduction to Tensor Calculus for General Relativity - MIT
    There are three essential ideas underlying general relativity (GR). The first is that space- time may be described as a curved, four-dimensional ...
  23. [23]
  24. [24]
  25. [25]
    Namespaces (C++) - Microsoft Learn
    Jun 21, 2024 · A namespace is a declarative region that provides a scope to the identifiers (the names of types, functions, variables, etc) inside it.
  26. [26]
  27. [27]
  28. [28]
    What's New in Python 2.3 — Python 3.14.0 documentation
    Built-in types now support the extended slicing syntax, as described in section Extended Slices of this document. A new built-in function, sum(iterable, start=0) ...
  29. [29]
    Python Cookbook - Accessing Substrings - O'Reilly
    This recipe was inspired by Recipe 1.1 in the Perl Cookbook. Python's slicing takes the place of Perl's substr . Perl's built-in unpack and Python's struct.
  30. [30]
    Array.prototype.slice() - JavaScript - MDN Web Docs
    Jul 20, 2025 · The slice() method returns a shallow copy of a portion of an array into a new array, selected from start to end (end not included).Try it · Syntax · Description · Examples
  31. [31]
    Python list slicing efficiency - Stack Overflow
    Aug 26, 2013 · Is something like for number in mylist[middle:]: number+=2 acceptable? (Or it is not considered a good practice to slice a really large list?)how fast is python's slicePython List Slicing PerformanceMore results from stackoverflow.com
  32. [32]
    Selectors Level 4 - W3C
    Nov 11, 2022 · The syntax of a pseudo-element is "::" (two U+003A COLON characters) followed by the name of the pseudo-element as an identifier. Pseudo-element ...
  33. [33]
    CSS Pseudo-Elements Module Level 4 - W3C
    Jun 27, 2025 · This CSS module defines pseudo-elements, abstract elements that represent portions of the CSS render tree that can be selected and styled.Missing: double | Show results with:double
  34. [34]
    ::before vs :before | CSS-Tricks
    Aug 29, 2018 · ::before is definitely a pseudo-element, so it should use the double colon. The distinction between a pseudo-element and pseudo-selector is ...
  35. [35]
  36. [36]
    Pseudo-elements - web.dev
    Apr 27, 2021 · A pseudo-element is like adding or targeting an extra element without having to add more HTML. This example solution, using ::first-letter , is ...::before and ::after · ::backdrop · ::marker · ::selection<|control11|><|separator|>
  37. [37]
    CSS Generated content for pseudo-elements | Can I use... Support ...
    1 IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element).