This question already has answers here:
What is this odd colon behavior doing?
(2 answers)
Closed 3 years ago.
I made a typo in my code that went completely silent syntactically.
dict_args : {"arg1":1,"arg2":2,"arg3":3}
# .... Some more code
some_function(**dict_args)
# .... Some more code
If you haven't noticed it, it's the use of : instead of = when declaring the variable dict_args.
So my question is, does the python syntax : a:1, by itself, hold any meaning ? Or should it hypothetically be considered a syntax error?
PEP-526 introduced variable annotations, which provide programmers a way to add type information to variables. This allows, among other things, statements like
x: int
to indicate that there is a local variable of type int, without initializing it. In PEP-484 - Acceptable Type Hints, we can see that annotations "must be valid expressions that evaluate without raising exceptions", which your dictionary literal is.
If you look at the Python grammar itself you can see that the expr_stmt and annassign rules make the example you show legal.
If you're using an IDE/other type hinting tools, they should definitely complain about this, but it doesn't break the rules that Python has set up.
Related
This question already has answers here:
What is the difference between statically typed and dynamically typed languages?
(19 answers)
Closed 1 year ago.
I forgot the terminology of this. In Python, if you let a=1, later you can re-assign a="letter".
But in some languages, once you let a=1, a has to stay as an integer forever.
What do we call this in textbook?
This is called statically-typed vs. dynamically-typed. In a dynamically typed language, you must define a variable with a type and it must keep that type forever.
This makes sense when you consider the meaning of the word 'static'. Something which is static is immutable i.e. is immutable. Likewise, 'dynamic' things or items can be changed freely.
For example, in C:
int x = 1;
x = "string?";
returns
error: invalid conversion from 'const char*' to 'int'
While in a language like Python, you can freely reuse variables, like this:
x = 1
x = "string?"
would return no error.
Dynamic typing. Also related, in Python, to weak typing.
Answer is wrong, see comments. Leaving it here as it brings value in being corrected.
This question already has answers here:
Is it possible to escape a reserved word in Python?
(5 answers)
Closed 2 years ago.
Currently I am trying to implement an API in Python that originally was written in another programming language. This API has a function called except. I am trying to implement this function in Python but obviously this resulted in an error as except is already part of the Python language. It's probably bad practice, but does someone know if it's even possible to declare a function called except?
def except():
print('hi')
>>>
def except():
^
SyntaxError: invalid syntax
It's not possible; except is a Python keyword and cannot be used as a user-defined name in any way. You can find the complete list of keywords through the keyword module.
No it is a reserved keywords. They can't be used to declare a variable or a function.
You can't declare a method named "except" cause "except" is a reserved keyword in python but you can use "Except"
This question already has answers here:
What are variable annotations?
(2 answers)
Closed 3 years ago.
I just came across this function:
def splitComma(line: str):
splits = Utils.COMMA_DELIMITER.split(line)
return "{}, {}".format(splits[1], splits[2])
I am aware that you can separate parameters by , or can set a value within a parameter like a=39 but I have not seen a colon like line:str. I have checked the function definition online but could not find anything like this. What does this colon mean?
It's a function annotation; function arguments and the return value can be tagged with arbitrary Python expressions. Python itself ignores the annotation (other than saving it), but third-party tools can make use of them.
In this case, it is intended as type hint: programs like mypy can analyze your code statically (that is, without running it, but only looking at the source code itself) to ensure that only str values are passed as arguments to splitComma.
A fuller annotation to also specify the return type of the function:
def splitComma(line: str) -> str:
...
(Note that originally, function annotations weren't assumed to have any specific semantics. This is still true, but the overwhelming assumption these days is that the annotations provide type hints.)
This is a type annotation used by static analysis tools to check, well, types. It helps ensure program correctness before you run the code.
This question already has answers here:
Why does code like `str = str(...)` cause a TypeError, but only the second time?
(20 answers)
Closed 6 years ago.
I have used print to store value like:
print=3
After then I am not able to use it to print any message:
print('a message')
Its giving error:
'int object is not callable'
Is there any way to use print both as a variable and a functions? If not then Why not python just makes built-in function names as keyword to remove this conflict?
Functions and data share the same namespace in Python -- as they do in many other languages (the entire family of LISP-1s comes to mind first, including Scheme and Clojure; also Ruby, Groovy, and I'm sure many more).
Thus no, you cannot do this. Widely available checkers (pylint, pychecker, etc) will catch and report on attempts to shadow builtins (such as print) with data.
This question already has answers here:
Closed 12 years ago.
Possible Duplicates:
python ‘self’ explained
Why do you need explicitly have the “self” argument into a Python method?
Why does Python require the "self" parameter for methods?
For example def method_abc(self, arg1)
And is there ever a date that the need for it will be removed?
Python gives you the option of naming it something other than self, even though the standard is to name it self. Just as it gives you the option of using tabs for indents, even though the standard is to use spaces.
In other words, it's not just "assumed" because...
To give you naming flexibility
To make it clearer that something will be passed self (or not).