Python Data Science Jobs & Interviews
20.7K subscribers
192 photos
4 videos
25 files
335 links
Your go-to hub for Python and Data Science—featuring questions, answers, quizzes, and interview tips to sharpen your skills and boost your career in the data-driven world.

Admin: @Hussein_Sheikho
Download Telegram
🔧 Python Interview Question – Configuration Management Across Modules

Question:
You're working on a Python project with several modules, and you need to make some global configurations accessible across all modules. How would you achieve this?

Options:
a) Use global variables
b) Use the configparser module
c) Use function arguments
d) Use environment variables

---

Correct Answer: d) Use environment variables

---

💡 Explanation:

When dealing with multiple modules in a project, environment variables are the best way to store and share global configurations like API keys, file paths, and credentials.

They are:
- Secure 🔐
- Easily accessible from any module 🧩
- Ideal for CI/CD and production environments ⚙️
- Supported natively in Python via os.environ

Example:
import os

api_key = os.environ.get("API_KEY")


Pair it with .env files and libraries like python-dotenv for even smoother management.

---

Why not the others?

- Global variables: Messy and hard to manage in large codebases.
- configparser: Good for reading config files (`.ini`) but not inherently global or secure.
- Function arguments: Not scalable — you'd have to manually pass config through every function.

---

🧠 Tip: Always externalize configs to keep your code clean, secure, and flexible!

#Python #InterviewTips #PythonTips #CodingBestPractices #EnvironmentVariables #SoftwareEngineering

🔍By: https://t.iss.one/DataScienceQ
👍41
🟩 What’s the question?
You’ve created a Python module (a .py file) with several functions,
but you don’t want all of them to be available when someone imports the module using from mymodule import *.

For example:

# mymodule.py
def func1():
pass

def func2():
pass

def secret_func():
pass


Now, if someone writes:

from mymodule import *


🔻 All three functions will be imported — but you want to hide secret_func.

So what’s the solution?
You define a list named __all__ that only contains the names of the functions you want to expose:

__all__ = ['func1', 'func2']


Now if someone uses:

from mymodule import *


They’ll get only func1 and func2. The secret_func stays hidden 🔒

🟡 In sall __all__ list controls what gets imported when someone uses import *.
Everything not listed stays out — though it’s still accessible manually if someone knows the name.

If this was confusing or you want a real example with output, just ask, my friend 💡❤️

#Python #PythonTips #CodeClean #ImportMagic


🔍By: https://t.iss.one/DataScienceQ
👍61🥰1
🐍 Python Tip of the Day: Decorators — Enhance Function Behavior

🧠 What is a Decorator in Python?
A decorator lets you wrap extra logic before or after a function runs, without modifying its original code.

🔥 A Simple Example

Imagine you have a basic greeting function:

def say_hello():
print("Hello!")


You want to log a message before and after it runs, but you don’t want to touch say_hello() itself. Here’s where a decorator comes in:

def my_decorator(func):
def wrapper():
print("Calling the function...")
func()
print("Function has been called.")
return wrapper


Now “decorate” your function:

@my_decorator
def say_hello():
print("Hello!")


When you call it:

say_hello()


Output:
Calling the function...
Hello!
Function has been called.




💡 Quick Tip:
The @my_decorator syntax is just syntactic sugar for:
s
ay_hello = my_decorator(say_hello)

🚀 Why Use Decorators?
- 🔄 Reuse common “before/after” logic
- 🔒 Keep your original functions clean
- 🔧 Easily add logging, authentication, timing, and more



#PythonTips #Decorators #AdvancedPython #CleanCode #CodingMagic

🔍By: https://t.iss.one/DataScienceQ
👍5🔥2
🧠 What is a Generator in Python?
A generator is a special type of iterator that produces values lazily—one at a time, and only when needed—without storing them all in memory.

---

How do you create a generator?
Correct answer:
Option 1: Use the yield keyword inside a function.

🔥 Simple example:

def countdown(n):
while n > 0:
yield n
n -= 1


When you call this function:

gen = countdown(3)
print(next(gen)) # 3
print(next(gen)) # 2
print(next(gen)) # 1


Each time you call next(), the function resumes from where it left off, runs until it hits yield, returns a value, and pauses again.

---

Why are the other options incorrect?

- Option 2 (class with __iter__ and __next__):
It works, but it’s more complex. Using yield is simpler and more Pythonic.

- Options 3 & 4 (for or while loops):
Loops are not generators themselves. They just iterate over iterables.

---

💡 Pro Tip:
Generators are perfect when working with large or infinite datasets. They’re memory-efficient, fast, and clean to write.

---

📌 #Python #Generator #yield #AdvancedPython #PythonTips #Coding


🔍By: https://t.iss.one/DataScienceQ
👍62🔥2❤‍🔥1
🎯 Python Quick Quiz – OOP Edition
💡 _What is the primary use of the __init__ method in a Python class?_

🔘 Option 1: Initializing class attributes
🔘 Option 2: Defining class methods
🔘 Option 3: Inheriting from a superclass
🔘 Option 4: Handling exceptions

🧠 Correct Answer: Option 1
📌 The init method is a special method used to initialize the object’s attributes when a class is instantiated. It's like a constructor in other programming languages.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

john = Person("John", 25)
print(john.name) # Output: John


#PythonTips #OOP #PythonQuiz #CodingCommunity

🎨https://t.iss.one/DataScienceQ
🔥42
🚀 How to Call a Parent Class Method from a Child Class in Python?

Let's dive in and answer this popular interview-style question! 👨‍💻👩‍💻

---

🔥 Question:
How can you call a method of the parent class from within a method of a child class?

---

Correct Answer:
Option 1: Using the super() function

👉 Why?
- In Python, super() is the standard way to access methods and properties of a parent class from inside a child class.
- It's clean, elegant, and also supports multiple inheritance properly.

---
Quick Example:

class Parent:
def greet(self):
print("Hello from Parent!")

class Child(Parent):
def greet(self):
print("Hello from Child!")
super().greet() # Calling parent class method

# Create an instance
child = Child()
child.greet()


🛠 Output:
Hello from Child!
Hello from Parent!


---

🔥 Let's Review Other Options:
- Option 2: Directly calling parent method (like Parent.greet(self)) is possible but not recommended. It tightly couples the child to a specific parent class name.
- Option 3: Creating an instance of the parent class is incorrect; you should not create a new parent object.
- Option 4: parent_method() syntax without reference is invalid.

---

🎯 Conclusion:
Always use super() inside child classes to call parent class methods — it's the Pythonic way! 🐍

---

📚 Hashtags:
#Python #OOP #Inheritance #super #PythonTips #Programming #CodeNewbie #LearnPython

🔚 Channel:
https://t.iss.one/DataScienceQ
👍7🔥1👏1
How to Dynamically Create a Class at Runtime in Python?

You can dynamically create a class in Python using the built-in type() function. This is one of the simplest ways to leverage metaclasses.

Example:

# Create a new class dynamically
MyDynamicClass = type('MyDynamicClass', (object,), {
'say_hello': lambda self: print("Hello!")
})

# Use the dynamically created class
obj = MyDynamicClass()
obj.say_hello()

Explanation:

* 'MyDynamicClass': Name of the new class
* (object,): Tuple of base classes (here, just inheriting from object)
* {'say_hello': ...}: Dictionary of attributes/methods for the class

Output:

Hello!

This is a powerful feature used in metaprogramming and framework design.



#PythonTips #Metaclass #PythonOOP #DynamicClass #typeFunction #AdvancedPython #CodingTips

🌺https://t.iss.one/DataScienceQ
👍2🔥2
In Python, Object-Oriented Programming (OOP) allows you to define classes and create objects with attributes and methods. Classes are blueprints for creating objects, and they support key concepts like inheritance, encapsulation, polymorphism, and abstraction.

class Animal:
def __init__(self, name):
self.name = name

def speak(self):
return f"{self.name} makes a sound"

class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"

class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"

# Creating instances
dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.speak()) # Output: Buddy says Woof!
print(cat.speak()) # Output: Whiskers says Meow!

#Python #OOP #Classes #Inheritance #Polymorphism #Encapsulation #Programming #ObjectOriented #PythonTips #CodeExamples

By: @DataScienceQ 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
In Python, a list comprehension is a concise and elegant way to create lists. It allows you to generate a new list by applying an expression to each item in an existing iterable (like a list or range), often in a single line of code, making it more readable and compact than a traditional for loop.

# Traditional way using a for loop
squares_loop = []
for i in range(10):
    squares_loop.append(i i)

print(f"Using a loop: {squares_loop}")

The Pythonic way using a list comprehension

squares_comp = [i i for i in range(10)]

print(f"Using comprehension: {squares_comp}")

You can also add conditions

even_squares = [i * i for i in range(10) if i % 2 == 0]
print(f"Even squares only: {even_squares}")

Both the loop and the basic list comprehension produce the exact same result: a list of the first 10 square numbers. However, the list comprehension is more efficient and easier to read once you are familiar with the syntax.

#Python #ListComprehension #PythonTips #CodeExamples #Programming #Pythonic #Developer #Code

By: @DataScienceQ 🩵
Please open Telegram to view this post
VIEW IN TELEGRAM
1