Here are some easy ones:
- What are Python decorators and how would you use them?
- How do you debug your Python code?
- How would you setup many projects where each one uses different versions of Python and third party libraries?
- Do you follow PEP8 while writing your code?
Python interview questions I can use in interviews
Python interview questions - Software Engineering Stack Exchange
Python Interview Question - Python - SitePoint Forums | Web Development & Design Community
Python interview questions
I'll try my hand at a few:
What are Python decorators and how would you use them?
They extend past python, and are functions that take a function as an argument and return functions. A simple example might be a decorator that takes a function, prints its args to stdout, prints the return value to stdout, then returns that return value. The syntax in Python is usually done with the @decorator_name above a function definition.
How would you setup many projects where each one uses different versions of Python and third party libraries?
virtualenv
What is PEP8 and do you follow its guidelines when you're coding?
A coding standard, and I try to. pylint is a great help.
How are arguments passed – by reference of by value?
Probably all through reference, but I'm not sure about primitives under the hood. Anyone know this? If you pass f(12, 81), are those by value?
Do you know what list and dict comprehensions are? Can you give an example?
ways to construct a list or dict through an expression and an iterable.
>>> x = [(a, a+1) for a in range(5)]
>>> y = dict((a,b) for a,b in x)
>>> x
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
>>> y
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5}Show me three different ways of fetching every third item in the list
[x for i, x in enumerate(thelist) if i%3 == 0]
for i, x in enumerate(thelist):
if i % 3: continue
yield x
a = 0
for x in thelist:
if a%3: continue
yield x
a += 1Do you know what is the difference between lists and tuples? Can you give me an example for their usage?
Tuples are immutable. A tuple might be a good type for a coordinate inst var in some class. Lists are ordered collections, but with a tuple, each index generally has a certain meaning, so coord[0] is the x coordinate and coord[1] is y.
Do you know the difference between range and xrange?
Range returns a list of the full sequence while xrange generates each element iteratively like you would with the "yield" keyword. This changes in python3, and the default behavior is to yield like xrange. I think xrange is out.
Tell me a few differences between Python 2.x and 3.x?
The previous answer. print is no longer a statement and is just a function ("print 5" won't work anymore and you need parens), they added the Ellipse object (...). That's all I know off hand.
The with statement and its usage.
It's for context management, and you can define your own that implement enter init and exit if it might help. This is very useful for opening and closing files automatically (with open(foo) as bar:)
How to avoid cyclical imports without having to resort to imports in functions?
Refactoring your code? Not sure. When I've ran into this I generally have restructured functions into different modules which ended up cleaning everything anyway.
what's wrong with import all?
You can overwrite functions and this can be dangerous especially if you don't maintain that module.
-
rewrite.py def open(foo): print('aint happening!')
-
test.py from rewrite import * z = open('test.txt')
prints aint happening!
Why is the GIL important?
It has to do with preventing true multithreaded bytecode, and has been an issue forever. I think python bytecode execution is protected with the Global Interpreter Lock so every bc execution is atomic. Explained best here: http://wiki.python.org/moin/GlobalInterpreterLock
You might want to consider writing a multithreaded module or program in C and wrapping it with Python if this is an issue for you.
What are "special" methods (<foo>), how they work, etc
These are methods like str and gt, which override behavior of other global functions like str() and operators like >. enter and exit will be used with the with keyword, and there are many more like getattr. Overriding getattr can result in some very unpredictable behavior with a dynamic language like Python, and you should be very careful when you use magic like that.
can you manipulate functions as first-class objects?
Yes. eg. they can be passed as args to functions.
the difference between "class Foo" and "class Foo(object)"
class Foo(object) inherits from the new-style object. I don't know the specifics, but here's stack overflow: http://stackoverflow.com/questions/4015417/python-class-inherits-object
how to read a 8GB file in python?
Operate on chunks, and not one byte at a time. Be wary about the RAM of the host machine. What is the nature of the data such that it is so large? How are you operating on it? What are you returning? Are you accessing it sequentially or randomly? There's a lot more to ask than to answer here.
what don't you like about Python?
It's slow, and it can be too dynamic for certain tasks in my opinion. It is not compiled. It can be very unpredictable. People abuse the flexibility of it sometimes.
can you convert ascii characters to an integer without using built in methods like string.atoi or int()? curious one
struct.unpack("<I", foo)[0]
ord, chr
do you use tabs or spaces, which ones are better?
Spaces. Stick to PEP8 when possible.
Ok, so should I add something else or is the list comprehensive?
-
generators/yield keyword
-
what is multiple inheritance / does python have multiple inheritance
-
is Python compiled, interpreted and/or emulated
-
What differentiates Python from Ruby
-
How do you debug your Python? What's pdb and how do you use it?
-
How do you modify global variables in a function? Why should you avoid this?
-
Use of the re module... what is it, give an example, etc.
As a remote developer, how do you give priority to your work?
Do you have remote work experience as a software developer?
What skills have made remote-working successful for you?
Videos
Recently my workplace has started hiring python developers and since I'm one of the python guy I am asked to take python interviews starting today.
Now in my 4-5 years of learning and working with python I have accumulated a lot python challenges in my head as I'd constantly trying to come up questions that an interviewer might ask me.
Yesterday I made some samples questions and share with my senior who found the questions little too deep for a 3 YOE Python full stack developer role.
Please give me few questions to get some idea that I can use or be inspired from to make new set of questions.
Also is this question really too much for such interview: Given a file containing very large string (around a gb), devise an optimal solution to get the first non repeating Character.
Here are some easy ones:
- What are Python decorators and how would you use them?
- How do you debug your Python code?
- How would you setup many projects where each one uses different versions of Python and third party libraries?
- Do you follow PEP8 while writing your code?
How about something involving Python list comprehensions? To me, those were one of the big selling points over C++, after I read about them in Dive into Python.
"Write a list comprehension that builds a list of the even numbers from 1 to 10 (inclusive)".
Where the answer is anything like this (note the range values avoid a fencepost error):
foo = [x for x in range(1, 11) if (x % 2) == 0]
print foo
[2, 4, 6, 8, 10]
For that matter, if you understand all the concepts listed in Dive into Python, that should cover most of the important features.
I'm about to go to my first Python interview and I'm compiling a list of all possible interview questions. Based on resources that I've found here, here and here I noted down the following common questions, what else should I add?
easy/intermediate
-
What are Python decorators and how would you use them?
-
How would you setup many projects where each one uses different versions of Python and third party libraries?
-
What is PEP8 and do you follow its guidelines when you're coding?
-
How are arguments passed – by reference of by value? (easy, but not that easy, I'm not sure if I can answer this clearly)
-
Do you know what list and dict comprehensions are? Can you give an example?
-
Show me three different ways of fetching every third item in the list
-
Do you know what is the difference between lists and tuples? Can you give me an example for their usage?
-
Do you know the difference between range and xrange?
-
Tell me a few differences between Python 2.x and 3.x?
-
The with statement and its usage.
-
How to avoid cyclical imports without having to resort to imports in functions?
-
what's wrong with import all?
-
Why is the GIL important? (This actually puzzles me, don't know the answer)
-
What are "special" methods (<foo>), how they work, etc
-
can you manipulate functions as first-class objects?
-
the difference between "class Foo" and "class Foo(object)"
tricky, smart ones
-
how to read a 8GB file in python?
-
what don't you like about Python?
-
can you convert ascii characters to an integer without using built in methods like string.atoi or int()? curious one
subjective ones
-
do you use tabs or spaces, which ones are better?
Ok, so should I add something else or is the list comprehensive?
I'll try my hand at a few:
What are Python decorators and how would you use them?
They extend past python, and are functions that take a function as an argument and return functions. A simple example might be a decorator that takes a function, prints its args to stdout, prints the return value to stdout, then returns that return value. The syntax in Python is usually done with the @decorator_name above a function definition.
How would you setup many projects where each one uses different versions of Python and third party libraries?
virtualenv
What is PEP8 and do you follow its guidelines when you're coding?
A coding standard, and I try to. pylint is a great help.
How are arguments passed – by reference of by value?
Probably all through reference, but I'm not sure about primitives under the hood. Anyone know this? If you pass f(12, 81), are those by value?
Do you know what list and dict comprehensions are? Can you give an example?
ways to construct a list or dict through an expression and an iterable.
>>> x = [(a, a+1) for a in range(5)]
>>> y = dict((a,b) for a,b in x)
>>> x
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
>>> y
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5}
Show me three different ways of fetching every third item in the list
[x for i, x in enumerate(thelist) if i%3 == 0]
for i, x in enumerate(thelist):
if i % 3: continue
yield x
a = 0
for x in thelist:
if a%3: continue
yield x
a += 1
Do you know what is the difference between lists and tuples? Can you give me an example for their usage?
Tuples are immutable. A tuple might be a good type for a coordinate inst var in some class. Lists are ordered collections, but with a tuple, each index generally has a certain meaning, so coord[0] is the x coordinate and coord[1] is y.
Do you know the difference between range and xrange?
Range returns a list of the full sequence while xrange generates each element iteratively like you would with the "yield" keyword. This changes in python3, and the default behavior is to yield like xrange. I think xrange is out.
Tell me a few differences between Python 2.x and 3.x?
The previous answer. print is no longer a statement and is just a function ("print 5" won't work anymore and you need parens), they added the Ellipse object (...). That's all I know off hand.
The with statement and its usage.
It's for context management, and you can define your own that implement enter init and exit if it might help. This is very useful for opening and closing files automatically (with open(foo) as bar:)
How to avoid cyclical imports without having to resort to imports in functions?
Refactoring your code? Not sure. When I've ran into this I generally have restructured functions into different modules which ended up cleaning everything anyway.
what's wrong with import all?
You can overwrite functions and this can be dangerous especially if you don't maintain that module.
-
rewrite.py def open(foo): print('aint happening!')
-
test.py from rewrite import * z = open('test.txt')
prints aint happening!
Why is the GIL important?
It has to do with preventing true multithreaded bytecode, and has been an issue forever. I think python bytecode execution is protected with the Global Interpreter Lock so every bc execution is atomic. Explained best here: http://wiki.python.org/moin/GlobalInterpreterLock
You might want to consider writing a multithreaded module or program in C and wrapping it with Python if this is an issue for you.
What are "special" methods (<foo>), how they work, etc
These are methods like str and gt, which override behavior of other global functions like str() and operators like >. enter and exit will be used with the with keyword, and there are many more like getattr. Overriding getattr can result in some very unpredictable behavior with a dynamic language like Python, and you should be very careful when you use magic like that.
can you manipulate functions as first-class objects?
Yes. eg. they can be passed as args to functions.
the difference between "class Foo" and "class Foo(object)"
class Foo(object) inherits from the new-style object. I don't know the specifics, but here's stack overflow: http://stackoverflow.com/questions/4015417/python-class-inherits-object
how to read a 8GB file in python?
Operate on chunks, and not one byte at a time. Be wary about the RAM of the host machine. What is the nature of the data such that it is so large? How are you operating on it? What are you returning? Are you accessing it sequentially or randomly? There's a lot more to ask than to answer here.
what don't you like about Python?
It's slow, and it can be too dynamic for certain tasks in my opinion. It is not compiled. It can be very unpredictable. People abuse the flexibility of it sometimes.
can you convert ascii characters to an integer without using built in methods like string.atoi or int()? curious one
struct.unpack("<I", foo)[0]
ord, chr
do you use tabs or spaces, which ones are better?
Spaces. Stick to PEP8 when possible.
Ok, so should I add something else or is the list comprehensive?
-
generators/yield keyword
-
what is multiple inheritance / does python have multiple inheritance
-
is Python compiled, interpreted and/or emulated
-
What differentiates Python from Ruby
-
How do you debug your Python? What's pdb and how do you use it?
-
How do you modify global variables in a function? Why should you avoid this?
-
Use of the re module... what is it, give an example, etc.
Would be very good if you added the brief answers for the questions above :)